记录编号 364104 评测结果 AAAAAAAAAA
题目名称 [HZOI 2015]疯狂的颜色序列 最终得分 100
用户昵称 GravatarFoolMike 是否通过 通过
代码语言 C++ 运行时间 5.580 s
提交时间 2017-01-15 14:01:26 内存使用 7.14 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e6+10;
int n,q,pre[N],ans;
int read(){
	int x=0;char ch=getchar();
	while (ch>'9'||ch<'0') ch=getchar();
	while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
	return x;
}
struct node{
	int s;
	node *lc,*rc;
	node(){s=0;lc=rc=0;}
}*root[N];int T;
void build(node *x,int l,int r){
	if (l==r) return;
	int mid=(l+r)>>1;
	x->lc=new node();
	x->rc=new node();
	build(x->lc,l,mid);
	build(x->rc,mid+1,r);
}
void add(int p){
	node *x=root[T],*y=root[++T]=new node();
	int l=0,r=n-1;
	while (1){
		*y=*x;y->s++;
		if (l==r) break;
		int mid=(l+r)>>1;
		if (p>mid) x=x->rc,y=y->rc=new node(),l=mid+1;
			else x=x->lc,y=y->lc=new node(),r=mid;
	}
}
int query(int L,int R){
	node *x=root[L-1],*y=root[R];
	int p=L,l=0,r=n-1;
	ans=0;
	while (l!=r){
		int mid=(l+r)>>1;
		if (p>mid){
			ans+=y->lc->s-x->lc->s;
			x=x->rc;y=y->rc;l=mid+1;
		}
		else x=x->lc,y=y->lc,r=mid;
	}
	return ans;
}
int main()
{
	freopen("color_seq.in","r",stdin);
	freopen("color_seq.out","w",stdout);
	scanf("%d%d",&n,&q);
	root[0]=new node();
	build(root[0],0,n-1);
	for (int i=1;i<=n;i++){
		int x=read();
		add(pre[x]);
		pre[x]=i;
	}
	while (q--){
		int u=read(),v=read();
		u=(u+ans)%n+1;
		v=(v+ans)%n+1;
		if (u>v) swap(u,v);
		printf("%d\n",query(u,v));
	}
	return 0;
}