社区讨论

这可能是当前卡的最快的主席树了

P4113[HEOI2012] 采花参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo9my3wj
此快照首次捕获于
2023/10/28 14:02
2 年前
此快照最后确认于
2023/10/28 14:02
2 年前
查看原帖
还是T了最后一个点,求数据强度下降
CPP
#include<iostream>
#define I int  
#define F(a,b,c) for(register int a=b;a<=c;++a) 
const int LEN=1<<21;
char BUF[LEN],*Pin,*Pin_last,PUF[LEN],*Pout=PUF,*Pout_last=PUF+LEN-1;
inline char G(){return Pin==Pin_last&&(Pin_last=(Pin=BUF)+fread(BUF,1,LEN,stdin),Pin==Pin_last)?EOF:*Pin++;}
inline void P(char x){if(Pout==Pout_last)fwrite(PUF,1,Pout-PUF,stdout),Pout=PUF;*Pout++=x;}
inline int R(){int res=0,ch=' ';for(;(ch<'0'||ch>'9')&&ch!=EOF;ch=G());for(;ch>='0'&&ch<='9';ch=G())res=(res<<3)+(res<<1)+ch-48;return res;}
inline void wt(int a){if(a>9)wt(a/10);P(a%10+'0');return;}
inline void write(int a,char b){wt(a),P(b);}
/*头文件copy来的*/

const int N = 2e6+10;
I n,m,c,pre[N],pre2[N],l,r;

const int L = 20;
I trcnt,T[N];
struct TREE{
	I ls,rs,num;
}t[N*L];
#define ls(x) t[x].ls
#define rs(x) t[x].rs
inline I Mdfy(I pr,I a,I b,I s,I add){I x=++trcnt,mid=a+b>>1;
	t[x].num=t[pr].num+add;
	if(!(a^b)) return x;
	if(s<=mid) ls(x)=Mdfy(ls(pr),a,mid,s,add),rs(x)=rs(pr);
	else rs(x)=Mdfy(rs(pr),mid+1,b,s,add),ls(x)=ls(pr);
	return x;
}

signed main(){n=R(),c=R(),m=R();
	I lst,x,i,lim=n+1;
	for(i=1;i^lim;++i){x=R();
		if(pre[x]){lst;
			if(pre2[x]) lst=Mdfy(T[i-1],1,n,pre2[x],-1);
			else lst=T[i-1];
			T[i]=Mdfy(lst,1,n,pre[x],1);
		}
		else T[i]=T[i-1];
		pre2[x]=pre[x],pre[x]=i;
	}lim=m+1;
	for(i=1;i^lim;++i){l=R(),x=T[R()];
		I res=0,mid,a=1,b=n;
		while(a^b){
			if(l<=(mid=a+b>>1)) res+=t[rs(x)].num,x=ls(x),b=mid;
			else x=rs(x),a=mid+1;
		}
		write(res+t[x].num,'\n');
	}
	fwrite(PUF,1,Pout-PUF,stdout);
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...