/ Randle /

记录详情

Time Exceeded

/in/foo.cc: In function 'int rank(int&, int, int)':
/in/foo.cc:103:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
# 状态 耗时 内存占用
#1 Wrong Answer 3ms 360.0 KiB
#2 Wrong Answer 3ms 360.0 KiB
#3 Wrong Answer 4ms 372.0 KiB
#4 Wrong Answer 61ms 2.602 MiB
#5 Wrong Answer 64ms 2.625 MiB
#6 Time Exceeded ≥1005ms ≥340.0 KiB
#7 Wrong Answer 60ms 896.0 KiB
#8 Wrong Answer 66ms 2.75 MiB
#9 Wrong Answer 60ms 2.5 MiB
#10 Wrong Answer 62ms 2.48 MiB

代码

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

信息

递交者
类型
递交
题目
treap模板测试(原创)
题目数据
下载
语言
C++
递交时间
2017-12-11 19:24:28
评测时间
2017-12-11 19:24:28
评测机
分数
0
总耗时
≥1392ms
峰值内存
≥2.75 MiB