FHQ Treap求调,悬赏一关!
查看原帖
FHQ Treap求调,悬赏一关!
549999
sail_with_pleasure楼主2023/4/12 20:18
#include<bits/stdc++.h>
using namespace std;
const int N=4e6+1,mod=1e6;
int n,top,root,lson[N],rson[N],val[N],key[N],chong;
long long a[N],cnt;
void ins(int x){
	val[++top]=x;
	key[top]=rand();
	return;
}
void split(int s,int k,int &x,int &y){
	if(!s){
		x=y=0;
		return;
	}
	if(val[s]<=k){
		x=s;
		split(rson[s],k,rson[s],y);
	}else{
		y=s;
		split(lson[s],k,x,lson[s]);
	}
	return;
} 
int merge(int u,int v){
	if(!u||!v)return u+v;
	if(key[u]<key[v]){
		rson[u]=merge(rson[u],v);
		return u;
	}else{
		lson[v]=merge(u,lson[v]);
		return v;
	}
}
int main(){
	int l,op,r,left;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d%lld",&op,&a[i]);
		if(op==0){
			if(chong>=0){
				split(root,a[i],l,r);
				ins(a[i]);
				root=merge(merge(l,top),r);
			}else{
				split(root,a[i],l,r);
				long long x=l;
				while(rson[x]!=0){
					x=rson[x];
				}
				if(x==0)x=-1e10;
				else x=val[x];
				long long y=r;
				while(lson[y]!=0){
					y=lson[y];
				}
				if(y==0)y=1e10;
				else y=val[y];
				if(a[i]-x<=y-a[i]){
					split(l,x-1,l,left);
					left=merge(lson[left],rson[left]);
					root=merge(merge(l,left),r);
				}else{
					split(r,y+1,left,r);
					left=merge(lson[left],rson[left]);
					root=merge(merge(l,left),r);
				}
				cnt+=min(a[i]-x,y-a[i]);
			}
			chong++;
		}else{
			if(chong>0){
				split(root,a[i],l,r);
				long long x=l;
				while(rson[x]!=0){
					x=rson[x];
				}
				if(x==0)x=-1e10;
				else x=val[x];
				long long y=r;
				while(lson[y]!=0){
					y=lson[y];
				}
				if(y==0)y=1e10;
				else y=val[y];
				if(a[i]-x<=y-a[i]){
					split(l,x-1,l,left);
					left=merge(lson[left],rson[left]);
					root=merge(merge(l,left),r);
				}else{
					split(r,y+1,left,r);
					left=merge(lson[left],rson[left]);
					root=merge(merge(l,left),r);
				}
				cnt+=min(a[i]-x,y-a[i]);
			}else{
				split(root,a[i],l,r);
				ins(a[i]);
				root=merge(merge(l,top),r);
			}
			chong--;
		}
	}
	cout<<cnt%mod<<endl;
	return 0; 
} 
2023/4/12 20:18
加载中...