TEST
Posted hzoi-yzh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TEST相关的知识,希望对你有一定的参考价值。
不会写红论文qwq
#include<cstdio> #include<cmath> #include<ctime> #include<cstdlib> #include<cstring> #include<algorithm> #define ls tr[x].ch[0] #define rs tr[x].ch[1] #define ds tr[x].ch[d] #define reg register #define inf 0x6fffffff #define F(i,a,b) for(i=a;i<=b;++i) using namespace std; int cnt,rt,line,MIN; struct TREAP int ch[2],w,siz,cnt,rd; tr[1000005]; void up(int x) tr[x].siz=tr[ls].siz+tr[rs].siz+tr[x].cnt; void rot(int &x,int d) int son=ds; ds=tr[son].ch[d^1]; tr[son].ch[d^1]=x; up(x); up(x=son); void in(int &x,int w) if(!x) x=++cnt; // tr[x].siz=tr[x].cnt=1; tr[x].w=w; tr[x].rd=rand(); return; tr[x].siz++; if(tr[x].w==w) tr[x].cnt++;return; int d=w>tr[x].w; in(ds,w); if(tr[x].rd>tr[ds].rd) rot(x,d); void del(int &x,int w) if(!x) return; if(tr[x].w==w) if(tr[x].cnt>1) tr[x].cnt--; tr[x].siz--; return; int d=tr[ls].rd>tr[rs].rd; if(ls==0||rs==0) x=ls+rs; else rot(x,d),del(x,w); else tr[x].siz--,del(tr[x].ch[tr[x].w<w],w); void dfs(int x) if(ls) dfs(ls); if(rs) dfs(rs); if(MIN+line>tr[x].w) int t=tr[x].cnt; // while(t--) del(rt,tr[x].w); int kth(int x,int k) while(x) if(k<=tr[ls].siz) x=ls; else if(k>tr[x].cnt+tr[ls].siz) k-=tr[x].cnt+tr[ls].siz,x=rs; else return tr[x].w; int main() char s[5]; srand(time(0)); int n; scanf("%d%d",&n,&MIN); reg int x,num=0; while(n--) scanf("%s %d",s,&x); if(s[0]==‘I‘) if(x>=MIN) in(rt,x+line),++num; else if(s[0]==‘A‘) line-=x; else if(s[0]==‘S‘) line+=x; dfs(rt); else if(tr[rt].siz<x) printf("-1\n"); else printf("%d\n",kth(rt,tr[rt].siz-x+1)-line); printf("%d",num-tr[rt].siz); return 0;
以上是关于TEST的主要内容,如果未能解决你的问题,请参考以下文章