#222. 练习题1:线段树模板(一)

练习题1:线段树模板(一) - 题目 - Online Judge (haizeix.com)

#include<iostream>
using namespace std;

#define MAX_N 10000
#define lc(ind) (ind << 1)
#define rc(ind) (ind << 1 | 1)

struct node {
    int sum;
} tree[MAX_N << 2 + 5];
int arr[MAX_N + 5];
int root = 1;

void UP(int ind) {
    tree[ind].sum = max(tree[lc(ind)].sum, tree[rc(ind)].sum);
    return ;
}
void build(int ind, int l, int r) {
    if (l == r) {
        tree[ind].sum = arr[l];
        return ;
    }
    int mid = (l + r) >> 1;
    build(lc(ind), l, mid);
    build(rc(ind), mid + 1, r);
    UP(ind);
    return ;
}

void modify(int ind, int x, int y, int l, int r) {
    if (l == r) {
        if (l != x) return ;
        tree[ind].sum = y;
        return ;
    }
    int mid = (l + r) >> 1;
    if (x <= mid) modify(lc(ind),x, y, l, mid);
    else modify(rc(ind),x, y, mid + 1, r);
    UP(ind);
    return ;
}

int query(int ind, int x, int y, int l, int r) {
    if (x <= l && y >= r) {
        return tree[ind].sum;
    }
    int ans = 0x80000000;
    int mid = (l + r) >> 1;
    if (x <= mid) ans = max(ans, query(lc(ind), x, y, l, mid));
    if (y > mid) ans = max(ans, query(rc(ind), x, y, mid + 1, r));
    return ans;
}           

int main() {
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++) cin >> arr[i];
    build(root, 1, n);
    for (int i = 0; i < m; i++) {
        int a, b, c;
        cin >> a >> b >> c;
        if (a == 1) {
            modify(root, b, c, 1, n);
        } else {
            cout << query(root, b, c, 1, n) << endl;
        }
    }
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这应该是系统介绍LC的线段树题目全网截止发文时最全的文章了。从这篇文章里,你可以学到如何用线段树思维和模板解LC的...
    西部小笼包阅读 5,306评论 0 1
  • http://blog.csdn.net/liuledidai/article/details/9964697[h...
    Gitfan阅读 3,831评论 0 0
  • 本专题总结了线段树的各种应用,参考了胡浩大佬的文章,把代码全部改成了自己的风格。 功能:单点增减,区间求和参考例题...
    球球球球笨阅读 3,414评论 0 0
  • 最近重温了一下线段树,发现暑假学得太囫囵吞枣,某些细节没有真正理解,学算法还是要脚踏实地啊(日常鸡汤)!下面来总结...
    Steven1997阅读 5,522评论 0 3
  • 文章和代码已经归档至【Github仓库:algorithms-notes[https://github.com/t...
    timerring阅读 1,535评论 0 1

友情链接更多精彩内容