主席树模板
#include <bits/stdc++.h> using namespace std; #define limit (200000 + 5)//防止溢出 #define INF 2147483647 #define inf 0x3f3f3f3f3f #define lowbit(i) i&(-i)//一步两步 #define EPS 1e-6 #define FASTIO ios::sync_with_stdio(false);cin.tie(0); #define ff(a) printf("%d\n",a ); #define pi(a,b) pair<a,b> #define rep(i, a, b) for(ll i = a; i <= b ; ++i) #define per(i, a, b) for(ll i = b ; i >= a ; --i) #define MOD 998244353 #define traverse(u) for(int i = head[u]; ~i ; i = edge[i].next) #define FOPEN freopen("C:\\Users\\tiany\\CLionProjects\\acm_01\\data.txt", "rt", stdin) #define FOUT freopen("C:\\Users\\tiany\\CLionProjects\\acm_01\\dabiao.txt", "wt", stdout) #define debug(x) cout<<x<<endl typedef long long ll; typedef unsigned long long ull; inline ll read(){ ll sign = 1, x = 0;char s = getchar(); while(s > '9' || s < '0' ){if(s == '-')sign = -1;s = getchar();} while(s >= '0' && s <= '9'){x = (x << 3) + (x << 1) + s - '0';s = getchar();} return x * sign; }//快读 void write(ll x){ if(x < 0) putchar('-'),x = -x; if(x / 10) write(x / 10); putchar(x % 10 + '0'); } int tree[limit]; int lc[limit<<2], rc[limit<<2]; int tot; int a[limit]; int build(int l,int r){ int rt = ++tot; if(l == r){ a[rt] = read(); return rt; } int mid = l + (r - l) / 2; lc[rt] = build(l , mid); rc[rt] = build(mid + 1, r); return rt; } int update(int l, int r, int loc, int pre, int val){ int rt = ++tot; if(l == r){ a[rt] = val; return rt; } int mid = l + (r - l) / 2; if(loc <= mid){ rc[rt] = rc[pre]; lc[rt] = update(l, mid, loc, lc[pre], val); }else{ lc[rt] = lc[pre]; rc[rt] = update(mid + 1, r, loc, rc[pre],val); } return rt; } int query(int l, int r, int loc, int cur){ if(l == r){ return a[cur]; } int mid = l + (r - l) / 2; if(loc <= mid){ return query(l,mid,loc,lc[cur]); }else{ return query(mid + 1, r, loc, rc[cur]); } } int n,m; int main() { #ifdef LOCAL FOPEN; #endif n = read(),m = read(); tree[0] = build(1,n); rep(i,1,m){ int x = read(), op = read(); if(op == 1){ int loc = read(), val = read(); tree[i] = update(1,n, loc, tree[x],val); }else{ int loc = read(); tree[i] = tree[x]; write(query(1,n,loc,tree[x])),putchar('\n'); } } return 0; }
天才选手zerol的主页:https://zerol.me/
|
WeepingDemon的个人主页:https://weepingdemon.gitee.io/blog/