help莫名其妙64pts
查看原帖
help莫名其妙64pts
114181
ChasingAft楼主2020/8/14 15:13

蒟蒻是记录的每个节点的左右儿子,建树是像线段树一样建的,调了有点久了

#include<bits/stdc++.h>

using namespace std;
const int N = 2e6 + 10; 
int n,m;
int s[N * 8],a[N * 8],lson[N * 8],rson[N * 8],Root,Ver[N * 8];
int num = 0,cnt = 0;


inline int read() {
    int s = 0,w = 1;
    char ch = getchar();
    while(ch > '9' || ch < '0') {
        if(ch == '-') w = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9') {
        s = (s << 3) + (s << 1) + (ch ^ 48);
        ch = getchar();
    }
    return w * s;
}

inline void build(int k,int l,int r) {
    if(l == r) {
        s[k] = a[l];
        return ;
    }
    int mid = l + r >> 1;
	lson[k] = k << 1;
    build(k << 1,l,mid); 
	rson[k] = k << 1 | 1;
    build(k << 1 | 1,mid + 1,r);
}
inline void modify(int k,int pos,int l,int r,int New,int val) {
    if(l == r) {
        s[New] = val;
        return ;
    }
    int mid = l + r >> 1;
    if(pos <= mid) {
        ++cnt;
        lson[New] = cnt;
        rson[New] = rson[k];
        modify(lson[k],pos,l,mid,cnt,val);
    }
    else {
        ++cnt;
        lson[New] = lson[k];
        rson[New] = cnt;
        modify(rson[k],pos,mid + 1,r,cnt,val);
    }
}
inline int Ask(int k,int l,int r,int pos) {
    if(l == r) {
        return s[k];
    }
    int mid = l + r >> 1;
    if(pos <= mid) {
        return Ask(lson[k],l,mid,pos);
    }
    else return Ask(rson[k],mid + 1,r,pos);
}
int main() {
    n = read(),m = read();
    for(int i = 1;i <= n;i++) {
        a[i] = read();
    }
    build(1,1,n);
   	cnt = 2 * n - 1;
    Ver[0] = 1;
    for(int i = 1;i <= m;i++) {
        int Version,opt,pos,val;
        Version = read(),opt = read();
        switch(opt) {
            case 1:
            pos = read(),val = read();
            Ver[i] = ++cnt;
            modify(Ver[Version],pos,1,n,cnt,val);
            break;
            case 2:
            pos = read();
            Ver[i] = Ver[Version];
            printf("%d\n", Ask(Ver[Version],1,n,pos));
            break;
        }
    }
    
    return 0;
}
2020/8/14 15:13
加载中...