萌新刚学主席树,72 pt 求调
查看原帖
萌新刚学主席树,72 pt 求调
749665
huta0楼主2024/12/7 23:00
#include<iostream>
#include<map>
#include<vector>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#include<set>
#define rep(a,b,c) for(int a=b;a<=c;a++)
#define drep(a,b,c) for(int a=b;a>=c;a--)
#define all(a) a.begin(),a.end()
#define ai_jiang signed main()
#define int long long
using namespace std;
typedef long long ll;
using poly = vector<ll>;
namespace ai {
    constexpr int N = 1e6+5;
    int n,q,ver,op,l,r,rt[N<<1],tot,vv;
    struct node {
         int v,s[2];
    } tr[(int)(3e7)+5];
    #define lc(x) tr[x].s[0]
    #define rc(x) tr[x].s[1]
    void modify(int x,int &y,int l,int r,int pos,int v) {
          y=++tot; tr[y]=tr[x]; tr[y].v=v;
          if(l==r) return;
          int mid=l+((r-l)>>1);
          if(pos<=mid) modify(lc(x),lc(y),l,mid,pos,v);
          else modify(rc(x),rc(y),mid+1,r,pos,v);
    }
    int query(int x,int l,int r,int pos) {
          if(l==r) return tr[x].v;
          int mid=l+((r-l)>>1);
          if(pos<=mid) return query(lc(x),l,mid,pos);
          else return query(rc(x),mid+1,r,pos);
    }
}
using namespace ai;
ai_jiang {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(false);
    cin>>n>>q;
    rep(i,1,n) cin>>vv,modify(rt[i-1],rt[i],1,n,i,vv);
    rep(i,n+1,n+q) {
         cin>>ver>>op>>l;
         if(op==1) {
              cin>>r;
              modify(rt[ver+n],rt[i],1,n,l,r);
         } else {
              cout<<query(rt[ver+n],1,n,l)<<'\n';
              rt[i]=rt[ver+n];
         }
    }
    return 0;
}
    
2024/12/7 23:00
加载中...