记录编号 191992 评测结果 AAAAAAAAAA
题目名称 [HEOI 2012]采花 最终得分 100
用户昵称 Gravatar神利·代目 是否通过 通过
代码语言 C++ 运行时间 4.104 s
提交时间 2015-10-09 15:25:39 内存使用 30.80 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
int n,c,m,shu;
int pre[1000010],last[1000010],o[1000010];
int ans[1000010];
struct query
{
	int l,r,id;
}ask[1000010];
inline bool comp(query a,query b)
{
	return a.r<b.r;
}
int tree[1000010];
inline void add(int x,int w)
{
	for(;x<=n;x+=x&(-x))
		tree[x]+=w;
}
inline int sum(int x)
{
	int s=0;
	while(x)
	{
		s+=tree[x];
		x-=x&(-x);
	}
	return s;
}
int main()
{
	freopen("1flower.in","r",stdin);
	freopen("1flower.out","w",stdout);
	scanf("%d%d%d",&n,&c,&m);
	for(int i=1;i<=n;++i)
	{
		scanf("%d",&o[i]);
		pre[i]=last[o[i]];
		last[o[i]]=i;
	}
	for(int i=0;i<m;++i)
	{
		scanf("%d%d",&ask[i].l,&ask[i].r);
		ask[i].id=i;
	}
	std::sort(ask,ask+m,comp);
	for(int i=1;i<=n;++i)
	{
		if(pre[i])
		{
			add(pre[i]+1,-1);
			add(pre[pre[i]]+1,1);
		}
		while(i==ask[shu].r)
		{
			ans[ask[shu].id]=sum(ask[shu].l);
			++shu;
		}
	}
	for(int i=0;i<m;++i)
	    printf("%d\n",ans[i]);
}