记录编号 550970 评测结果 AAAAAAAAAA
题目名称 [HEOI 2012]采花 最终得分 100
用户昵称 Gravatar瑆の時間~無盡輪迴·林蔭 是否通过 通过
代码语言 C++ 运行时间 19.849 s
提交时间 2020-03-27 00:51:51 内存使用 32.29 MiB
显示代码纯文本
//只是把一般的莫队加入答案条件由出现一次以上变成了出现两次以上 
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm> 
#define R register
using namespace std;
struct PE
{
	int l,r,id;
};
PE Q[1000001];
int pos[1000001],col[1000001],cnt[1000001],ans[1000001];
int nl,nr,sum,n,m,c,block;
void read(int &x)
{
	x=0;
	int f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
			f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=(x<<1)+(x<<3)+(ch^48);
		//真就2倍+8倍=10倍呗 
		ch=getchar();
	} 
	x*=f;
}
bool Function(PE x,PE y)
{
	if(pos[x.l]==pos[y.l])
	{
		return x.r<y.r;
	}
	return x.l<y.l;
}
int LINYIN()
{
	freopen("1flower.in","r",stdin);
	freopen("1flower.out","w",stdout);
	read(n);
	read(c);
	read(m);
	block=sqrt(n);
	for(R int i=1;i<=n;i++)
	{
		read(col[i]);
		pos[i]=i/block+1;
	}
	for(R int i=1;i<=m;i++)
	{
		read(Q[i].l);
		read(Q[i].r);
		Q[i].id=i;
	}
	sort(Q+1,Q+1+m,Function);
	nl=1,nr=0,sum=0;
	for(R int i=1;i<=m;i++)
	{
		while(nl<Q[i].l)
		{
			if(--cnt[col[nl++]]==1)
				--sum;
			//DELETE(nl++);
		}
		while(nl>Q[i].l)
		{
			if(++cnt[col[--nl]]==2)
				++sum;
			//ADD(--nl);
		}
		while(nr<Q[i].r)
		{
			if(++cnt[col[++nr]]==2)
				++sum;
			//ADD(++nr);
		}
		while(nr>Q[i].r)
		{
			if(--cnt[col[nr--]]==1)
				--sum;
			//DELETE(nr--);
		}
		ans[Q[i].id]=sum;
	}
	for(R int i=1;i<=m;i++)
	{
		printf("%d\n",ans[i]);
	}
	return 0;
}
int SED=LINYIN();
int main()
{
	;
}