记录编号 175084 评测结果 AAAAAAAAAA
题目名称 [SDOI 2009] HH的项链 最终得分 100
用户昵称 Gravatar0 是否通过 通过
代码语言 C++ 运行时间 0.921 s
提交时间 2015-08-04 16:01:52 内存使用 7.54 MiB
显示代码纯文本
#include <cstdio>
#include <algorithm>
#define lowbit(x) (x&(-x))

using namespace std;

int n,m;
int pre[1000010],ans[200010];
int a[50010];
int c[50010];

struct at{
	int y,x,i;
}ask[200010];

bool comp(at a,at b)
{
	return a.y<b.y;
}

void insert(int x,int w)
{
	while(x<=n)
	{
		c[x]+=w;
		x+=lowbit(x);
	}
	return;
}

int query(int x)
{
	int tot=0;
	while(x>0)
	{
		tot+=c[x];
		x-=lowbit(x);
	}
	return tot;
}

int main()
{
	freopen("diff.in", "r", stdin);
	freopen("diff.out", "w", stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	scanf("%d",&m);	
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&ask[i].x,&ask[i].y);
		ask[i].i=i;
	}
	sort(ask+1,ask+m+1,comp);
	int okask=1;
	for(int i=1;i<=n;i++)
	{
		if(!pre[a[i]])
		{
			insert(i,1);
		}
		else
		{
			insert(pre[a[i]],-1);
			insert(i,1);
		}
		pre[a[i]]=i;
		while(ask[okask].y==i)
		{
			ans[ask[okask].i]=query(ask[okask].y)-query(ask[okask].x-1);
			okask++;
		}
	}
	for(int i=1;i<=m;i++)
	{
		printf("%d\n",ans[i]);
	}
}