那状数组求调
查看原帖
那状数组求调
749630
wxzzzz楼主2023/8/26 13:14
#include <bits/stdc++.h>
#define ll long long
#define rll register ll
#define cll const ll
#define N 1000005
using namespace std;
inline ll read()
{
    rll x=0;bool f=1;register char c=getchar();
    while(c<48||c>57){if(c=='-') f=0;c=getchar();}
    while(c>=48&&c<=57){x=x*10+(c^48);c=getchar();}
    return f?x:-x;
}
inline void write(ll x)
{
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+48);
}
cll n=read();
ll idx,cnt,c[N],t[N],ti[N],op[N];
inline void add(ll x,ll y){while(x<=N) c[x]+=y,x+=(x&-x);}
inline ll query(ll x)
{
	rll ret=0;
	while(x) ret+=c[x],x-=(x&-x);
	return ret;
}
inline ll get(ll x)
{
	rll l=1,r=N,mid,ret;
	while(l<=r)
	{
		mid=(l+r)>>1;
        //cout << "l=" << l << " r=" << r << " mid=" << mid << '\n';
		if(query(mid-1)+1>=x)
			ret=mid,r=mid-1;
		else l=mid+1;
	}
	return ret;
}
int main()
{
    for(rll i=1;i<=n;i++)
    {
        op[i]=read(),t[i]=read();
        if(op[i]!=4) ti[++cnt]=t[i];
    }
    sort(ti+1,ti+cnt+1);
    cnt=unique(ti+1,ti+cnt+1)-ti-1;
    for(rll i=1;i<=n;i++)
    {
        if(op[i]!=4) t[i]=lower_bound(ti+1,ti+1+cnt,t[i])-ti;
    	if(op[i]==1) add(t[i],1);
    	else if(op[i]==2) add(t[i],-1);
    	else if(op[i]==3) write(query(t[i]-1)+1),putchar('\n');
    	else if(op[i]==4) write(ti[get(t[i]+1)-1]),putchar('\n');
    	else if(op[i]==5) write(ti[get(query(t[i]-1)+1)-1]),putchar('\n');
    	else write(ti[get(query(t[i]-1)+2)-1]),putchar('\n');
	}
    return 0;
}
2023/8/26 13:14
加载中...