题面:
代码:
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 inline int rd(){ 7 int x=0,f=1;char c=getchar(); 8 while(c<'0'||c>'9'){ if(c=='-')f=-1; c=getchar();} 9 while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}10 return f*x;11 }12 const int maxn=(2e5)+50;13 int N,chd[maxn][3],a,o,val[maxn],rt,x,y,z,g,pr[maxn],tot=0,siz[maxn]; 14 inline int New_node(int a){15 val[++tot]=a;16 pr[tot]=rand();17 siz[tot]=1;18 return tot;19 }20 inline void Pushup(int a){21 siz[a]=siz[chd[a][0]]+siz[chd[a][1]]+1;22 return;23 }24 inline void Split(int now,int k,int &x,int &y){25 if(!now){x=y=0; return;}26 if(val[now]<=k){27 x=now;28 Split(chd[now][1],k,chd[now][1],y);29 }30 else{31 y=now;32 Split(chd[now][0],k,x,chd[now][0]);33 }34 Pushup(now);35 return;36 }37 inline int Merge(int a,int b){38 if(!a||!b)return (a+b);39 if(pr[a]
By:AlenaNuna