记录编号 255802 评测结果 AAAAAAAAAA
题目名称 [HZOI 2015]疯狂的颜色序列 最终得分 100
用户昵称 Gravatar一個人的雨 是否通过 通过
代码语言 C++ 运行时间 2.895 s
提交时间 2016-04-28 19:37:24 内存使用 294.05 MiB
显示代码纯文本
#include<queue>
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000010;
int tot=1,n,m,la[maxn];
int T[maxn*19],lson[maxn*19],rson[maxn*19],c[maxn*19];

inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}

int update(int root,int pos){
    if (!root) root=tot++,c[root]=0;
    int nr=tot++,tmp=nr,l=0,r=m;
    c[nr]=c[root]+1;
    while (l<r){
        int mid=(l+r)>>1;
        if (pos<=mid){
            lson[nr]=tot++;rson[nr]=rson[root];
            r=mid;root=lson[root];nr=lson[nr];
        }else if (pos>mid){
            lson[nr]=lson[root];rson[nr]=tot++;
            l=mid+1;root=rson[root];nr=rson[nr];
        }c[nr]=c[root]+1;
    }return tmp;
}

int query(int lr,int rr,int l,int r,int L,int R){
	if (c[rr]-c[lr]==0) return 0;
    if (l==L&&R==r) return c[rr]-c[lr];
    int mid=(l+r)>>1;
    if (R<=mid) return query(lson[lr],lson[rr],l,mid,L,R);
    else if (L>mid) return query(rson[lr],rson[rr],mid+1,r,L,R);
    else return query(lson[lr],lson[rr],l,mid,L,mid)+
                query(rson[lr],rson[rr],mid+1,r,mid+1,R);
}

int main(){
	freopen("color_seq.in","r",stdin);
	freopen("color_seq.out","w",stdout);
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;++i){
		int x; x=read();
		T[i]=update(T[i-1],la[x]);
		la[x]=i;
	}
	int lastans=0;
	for (int i=1;i<=m;++i){
		int x,y; x=read(); y=read();
		x=(x+lastans)%n+1;
		y=(y+lastans)%n+1;
		if (x>y) swap(x,y);
		lastans=query(T[x-1],T[y],0,n,0,x-1);
		printf("%d\n",lastans);
	}
	//while (1);
}