记录编号 191990 评测结果 AAAAAAAAAA
题目名称 [SDOI 2009] HH的项链 最终得分 100
用户昵称 Gravatarforever 是否通过 通过
代码语言 C++ 运行时间 1.328 s
提交时间 2015-10-09 15:24:09 内存使用 30.81 MiB
显示代码纯文本
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
struct dd{
   int l,r,id;
}jie[1000009];
inline int in() {
	int ret,neg;	char ch;
	ret = neg = 0 ; while (!isdigit(ch=getchar())&&ch!='-') ;
	if (ch=='-') neg = 1 , ch=getchar() ;
	while (ret = ret*10+ch-'0' , isdigit(ch=getchar())) ;
	if (neg) ret = -ret ;
	return ret ;
}
int belong[1000006],s[1000006],color[1000005],ans,n,m,c;
int as[1000006],bs[1000006];
bool comp(const dd & a,const dd & b){
	if(belong[a.l]==belong[b.l]) return a.r<b.r;
	return a.l<b.l;
}
void update(int x,int rt){
   s[color[x]]+=rt;
   if((s[color[x]]==1&&rt>0)||(s[color[x]]==0&&rt<0))
      ans+=rt;
}
int main(){
	freopen("diff.in", "r", stdin);
	freopen("diff.out", "w", stdout);
	n=in();
	int bol=(int)sqrt(n+0.5);
	for(int i=1;i<=n;++i) color[i]=in();
	for(int i=1;i<=n;++i) belong[i]=(int)((i-1)/bol)+1;
	m=in();
	for(int i=1;i<=m;++i){
	   jie[i].l=in();jie[i].r=in();jie[i].id=i;
	}
	sort(jie+1,jie+m+1,comp);
	int le=jie[1].l,re=jie[1].r;
	for(int i=le;i<=re;++i) update(i,1);
	if(le==re) as[jie[1].id]=0;
	else as[jie[1].id]=ans;
	for(int i=2;i<=m;++i){
	  while(re<jie[i].r) update(++re,1);
	  while(re>jie[i].r) update(re--,-1);
	  while(le>jie[i].l) update(--le,1);
	  while(le<jie[i].l) update(le++,-1);
	  if(jie[i].r==jie[i].l) as[jie[i].id]=0;
	  else as[jie[i].id]=ans;
	}
	for(int i=1;i<=m;++i) printf("%d\n",as[i]);
	return 0;
}