记录编号 142085 评测结果 AAAAAAAAAA
题目名称 [SDOI 2009] HH的项链 最终得分 100
用户昵称 Gravatar席一鸣 是否通过 通过
代码语言 C++ 运行时间 4.638 s
提交时间 2014-12-06 10:40:34 内存使用 7.94 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct s
{
	int l,n,r;
}q[200010];
int a[50010],b[200010],i,j,l[1000010],m,n,p[50010];
struct f
{
	int a[50010],c[50010];
	void o(int i,int x)
	{
		a[i]+=x;
		while(i<=n)
		{
			c[i]+=x;
			i+=(i&-i);
		}
	}
	int u(int i)
	{
		int r=0;
		while(i)
		{
			r+=c[i];
			i-=(i&-i);
		}
		return r;
	}
}t;
int d(const void *a,const void *b)
{
	return(*(s*)a).r-(*(s*)b).r;
}
main()
{
	freopen("diff.in","r",stdin);
	freopen("diff.out","w",stdout);
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cin>>a[i];
		p[i]=l[a[i]];
		l[a[i]]=i;
	}
	cin>>m;
	for(i=1;i<=m;i++)
	{
		q[i].n=i;
		cin>>q[i].l>>q[i].r;
	}
	qsort(q+1,m,sizeof(s),d);
	for(i=1;i<=m;i++)
	{
		while(j<q[i].r)
		{
			j++;
			t.o(j+1,-1);
			t.o(p[j]+1,1);
		}
		b[q[i].n]=t.u(q[i].l);
	}
	for(i=1;i<=m;i++)
		cout<<b[i]<<endl;
}