样例过了,测试点下下来在本地也能过,但是不知道为什么交上去RE……
有没有大佬救救我从昨天晚上调到现在了qwq
#include<bits/stdc++.h>
#define ll long long
#define pt puts("")
#define lu t[u].ls
#define ru t[u].rs
using namespace std;
ll rd()
{
ll f=1,x=0; char c;
while (!isdigit(c=getchar())) if (c=='-') f=-1;
while (isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
return f*x;
}
void wt(ll x)
{
if (x<0) putchar('-'),x=-x;
if (x>9) wt(x/10);
putchar(x%10+'0');
}
const int M=1e6+5; int n,ct,rt;
struct node{int ls,rs,ky,pr,sz;}t[M];
void nw(int x){t[++ct]={0,0,x,rand(),1};}
void up(int u){t[u].sz=t[lu].sz+t[ru].sz+1;}
void sp(int u,int x,int &l,int &r)
{
if(u==0) {l=r=0; return;}
if(t[u].ky<=x) {l=u; sp(ru,x,ru,r);}
else {r=u; sp(lu,x,l,lu);}
up(u);
}
int mg(int l,int r)
{
if(l==0||r==0) return l+r;
if(t[l].pr>t[r].pr) {t[l].rs=mg(t[l].rs,r); up(l); return l;}
else {t[r].ls=mg(l,t[r].ls); up(r); return r;}
}
int kt(int u,int k)
{
if(k==t[lu].sz+1) return u;
if(k<=t[lu].sz) return kt(lu,k);
if(k>t[lu].sz) return kt(ru,k-t[lu].sz-1);
}
int ins(int x)
{
int l,r; sp(rt,x,l,r); nw(x);
int a=mg(l,ct); rt=mg(a,r);
}
int del(int x)
{
int l,r,u; sp(rt,x,l,r); sp(l,x-1,l,u);
u=mg(lu,ru); rt=mg(mg(l,u),r);
}
void rnk(int x)
{
int l,r; sp(rt,x-1,l,r);
wt(t[l].sz+1),pt; rt=mg(l,r);
}
void pre(int x)
{
int l,r; sp(rt,x-1,l,r);
wt(t[kt(l,t[l].sz)].ky),pt; rt=mg(l,r);
}
void suc(int x)
{
int l,r; sp(rt,x,l,r);
wt(t[kt(r,1)].ky),pt; rt=mg(l,r);
}
int main()
{
srand(time(0)); n=rd();
while(n--)
{
int op=rd(),x=rd();
if(op==1) ins(x);
if(op==2) del(x);
if(op==3) rnk(x);
if(op==4) wt(t[kt(rt,x)].ky),pt;
if(op==5) pre(x);
if(op==6) suc(x);
}
return 0;
}