请问为什么这个样例过不了?
查看原帖
请问为什么这个样例过不了?
505805
ass_wecan楼主2022/3/28 12:58
#include<bits/stdc++.h>
#define printlf(x) print(x),putchar('\n')
#define printsp(x) print(x),putchar(' ')
using namespace std;
inline int read(){
    int x=0;
    bool w=0;
    char c=getchar();
    while(!isdigit(c))  w|=c=='-',c=getchar();
    while(isdigit(c))   x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return w?-x:x;
}
inline void print(int x){
    if(x<0) x=-x,putchar('-');
    if(x>9) print(x/10);
    putchar('0'+x%10);
}
namespace FHQ_Treap{
	const int N=1e5+5;
	struct node{
		int val,rd,siz;
		int s[2];
	}tree[N];
	int p1,p2,p3,root,num;
	inline void Update(int x){
		tree[x].siz=tree[tree[x].s[1]].siz+tree[tree[x].s[0]].siz;
	}
	inline void split(int p,int val,int &x,int &y){
		if(!p)	{
			x=y=0;
			return ;
		}
		if(tree[p].val<=val)	x=p,split(tree[p].s[1],val,tree[p].s[1],y);
		else	y=p,split(tree[p].s[0],val,x,tree[p].s[0]);
		Update(p);
	}
	inline int merge(int x,int y){
		if(x==0 || y==0)	return x+y;
		if(tree[x].rd<tree[y].rd){
			tree[x].s[1]=merge(tree[x].s[1],y);
			Update(x);
			return x;
		}
		tree[y].s[0]=merge(x,tree[y].s[0]);
		Update(y);
		return y;
	}
	inline int Newnode(int x){
		tree[++num].siz=1,tree[num].val=x,tree[num].rd=rand();
		return num;
	}
	inline void Insert(int x){
		split(root,x,p1,p2);
		root=merge(merge(p1,Newnode(x)),p2);
	}
	inline void Delete(int x){
		split(root,x,p1,p3),split(root,x-1,p1,p2);
		p2=merge(tree[p2].s[0],tree[p2].s[1]);
		root=merge(merge(p1,p2),p3);			
	}
	inline int Rank(int x){
		split(root,x-1,p1,p2);
		root=merge(p1,p2);
		printlf(tree[p1].siz+1);	
	}
	inline int Find(int p,int x){
		while(1){
			if(x<=tree[tree[p].s[0]].siz)	{
				p=tree[p].s[0];
				continue;
			}
			if(x==tree[tree[p].s[0]].siz+1)	return tree[p].val;
			x-=tree[tree[p].s[0]].siz+1,p=tree[p].s[1];
		}
	}
	inline int pre(int x){
		split(root,x-1,p1,p2);
//		cout<<"pre's split is ok\n";
		root=merge(p1,p2);
		return Find(p1,tree[p1].siz);
	}
	inline int nxt(int x){
		split(root,x,p1,p2);
		root=merge(p1,p2);
		return Find(p2,1);
	}
}
signed main(){
	using namespace FHQ_Treap;
	int n=read();
	while(n--){
		int op=read();
		if(op==1)	Insert(read());
		if(op==2)	Delete(read());
		if(op==3)	printlf(Rank(read()));
		if(op==4)	printlf(Find(root,read()));
		if(op==5)	printlf(pre(read()));
		if(op==6)	printlf(nxt(read()));
	}
    return 0;
}


球球了帮帮我叭

2022/3/28 12:58
加载中...