线段树爆0求调
查看原帖
线段树爆0求调
999574
Life_Game楼主2024/10/31 23:40

线段树爆0求调,样例输出

4
12
#include <bits/stdc++.h>
using namespace std;

const int N = 1e6+10;

int tree[N<<2], a[N<<2], tag[N<<2], n, m;

int ls(int x) {return x*2;}
int rs(int x) {return x*2+1;}

void push_up(int x){
    tree[x] = tree[ls(x)] + tree[rs(x)];
}

void add_tag(int rt, int l, int r, int d){
    tag[rt] += d;
    tree[rt] += d * (r-l+1);
}

void push_down(int rt, int l, int r){
    if(tag[rt]){
        int mid = (l+r)>>1;
        add_tag(ls(rt), l, mid, tag[rt]);
        add_tag(rs(rt), mid+1, r, tag[rt]);
        tag[rt]=0;
    }
}

void update(int rt, int L, int R, int l, int r, int d){
    if(L<=l && r<=R){
        add_tag(rt, l, r, d);
        return ;
    }
    int mid = (l+r)>>1;
    push_down(rt, l, r);
    if(L <= mid) update(ls(rt), L, R, l, mid, d);
    if(R > mid) update(rs(rt), L, R, mid+1, r, d);
    push_up(rt);
}

int query(int rt, int L, int R, int l, int r){
    int ret=0;
    if(l>=L && r<=R) return tree[rt];
    push_down(rt, l, r);
    int mid = (l+r)>>1;
    if(L<=mid) ret += query(ls(l), L, R, l, mid);
    if(R>mid) ret += query(rs(r), L, R, mid+1, r);
    return ret;
}

void build(int rt, int l, int r){
    tag[rt]=0;
    if(l==r){
        cin>>tree[rt];
        return ;
    }
    int mid = (l+r)>>1;
    build(rs(rt), l, mid);
    build(ls(rt), mid+1, r);
    push_up(rt);
}

int search(int rt, int l, int r, int p){
    if (p == l && r == p){
        return tree[rt];
    }
    int mid = (l + r) >> 1;
    int sum = 0;
    push_down(rt, l, r);
    if (L <= mid){
        sum += search(ls(rt), l, mid, p);
    } else {
        sum += search(rs(rt), mid + 1, r, p);
    }
	push_up(rt);
    return sum;
}

int main(){
    cin>>n>>m;
    build(1, 1, n);
    while(m--){
        int op, x, y, k;
        cin>>op;
        if(op==1){
            cin>>x>>y>>k;
            update(1, x, y, 1, n, k);
        } else {
            cin>>x;
            // cout<<x<<'\n';
            cout<<search(1, 1, n, x)<<'\n';
        }
    }
}
2024/10/31 23:40
加载中...