/ Randle /

记录详情

Runtime Error


  
# 状态 耗时 内存占用
#1 Accepted 5ms 260.0 KiB
#2 Runtime Error 17ms 8.375 MiB
#3 Runtime Error 21ms 8.215 MiB
#4 Runtime Error 14ms 8.25 MiB
#5 Runtime Error 18ms 8.266 MiB
#6 Runtime Error 20ms 8.375 MiB
#7 Runtime Error 18ms 8.25 MiB
#8 Runtime Error 18ms 8.25 MiB
#9 Runtime Error 16ms 8.211 MiB
#10 Runtime Error 16ms 8.34 MiB

代码

#include<bits/stdc++.h>
inline void read(int &a)
{
    a=0;char c=getchar();
    while(c<'0'||c>'9')c=getchar();
    while(c>='0'&&c<='9')
    {
        a=(a<<1)+(a<<3)+c-'0';
        c=getchar();
    }
}
inline void write(int a)
{
    if(a<0){a=-a;putchar('-');}
    if(a>9)write(a/10);
    putchar(a%10+'0');
}
const int maxn=300001;
int nodenum=0,root=0;
struct node
{
    int order,num,sum;
    int son[2];
    inline int comp(int x)
    {
        if(x==num)return -1;
        if(x<num)return 0;
        return 1;
    }
    inline bool operator>(const node&a)
    {
        if(order>a.order)return true;
        return false;
    }
}p[maxn];
inline void newnode(int x)
{
    p[++nodenum].num=x;
    p[nodenum].son[0]=p[nodenum].son[1]=0;
    p[nodenum].order=rand()*rand();
    p[nodenum].sum=1;
}
inline void update(int k)
{
    p[k].sum=p[p[k].son[0]].sum+p[p[k].son[1]].sum+1;
}
inline void rotate(int &k,int d)
{
    int t=p[k].son[d];
    p[k].son[d]=p[t].son[d^1];
    p[t].son[d^1]=k;
    update(k);update(t);
    k=t;
}
inline void insert(int &k,int x)
{
    if(!k)
    {
        newnode(x);
        k=nodenum;
    }
    else
    {
        int d=p[k].comp(x);
        if(d==-1)d=0;
        insert(p[k].son[d],x);
        if(p[p[k].son[d]]>p[k])rotate(k,d);
        else update(k);
    }
}
inline void remove(int &k,int x)
{
    int d=p[k].comp(x),t;
    if(d==-1)
    {
        if(!(p[k].son[0])&&!(p[k].son[1]))
        {
            k=0;
            return ;
        }
        if(!(p[k].son[0]*p[k].son[1]))
        {
            t=p[k].son[0]+p[k].son[1];
            k=t;
            update(k);
            return ;
        }
        else
        {
            if(p[p[k].son[0]]>p[p[k].son[1]])t=0;
            else t=1;
            rotate(k,t);
            remove(p[k].son[t],x);
            update(k);
            return ;
        }
    }
    else
    {
        remove(p[k].son[d],x);
        update(k);
        return ;
    }
}
inline int query(int k,int x,int has)
{
    if(p[p[k].son[0]].sum+1+has==x)return p[k].num;
    if(p[p[k].son[0]].sum+1+has>x)return query(p[k].son[0],x,has);
    else return query(p[k].son[1],x,has+p[p[k].son[0] ].sum+1);
}
int main()
{
    srand(time(NULL));
    p[0].num=p[0].order=-INT_MAX;p[0].sum=0;
    int m,opt,x;
    read(m);
    while(m--)
    {
    	read(opt);read(x);
    	if(opt==1)insert(root,x);
		if(opt==2)remove(root,x);
		if(opt==3){write(query(root,x,0));printf("\n");}
	}
	return 0;
}

信息

递交者
类型
递交
题目
treap模板测试(原创)
题目数据
下载
语言
C++
递交时间
2017-12-08 17:53:41
评测时间
2017-12-08 17:53:42
评测机
分数
10
总耗时
167ms
峰值内存
8.375 MiB