[HEOI2012]采花
良心紫题,太良心了。做过HH的项链的人绝对都会做。
献上小压行代码:
#include<cstdio>
#include<algorithm>
#define o (wh&-wh)
#define F(A) for(int i=1;i<=A;i++)
using namespace std;
const int N=2000010;
struct node{int l,r,id;}q[N];
bool cmp(node s1,node s2){return s1.r<s2.r;}
int m,c,n,r,t[N],a[N],last[N],p[N],an[N];
void s1(int wh,int val){if(!wh)return;for(;wh<=m;wh+=o)t[wh]+=val;}
int s2(int wh){int an=0;for(;wh;wh-=o)an+=t[wh];return an;}
int main(){
scanf("%d%d%d",&m,&c,&n);
F(m)scanf("%d",a+i),p[i]=last[a[i]],last[a[i]]=i;
F(n)scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i;
sort(q+1,q+n+1,cmp);
F(n){
for(;r<q[i].r;){r++;s1(p[r],1);s1(p[p[r]],-1);}
an[q[i].id]=s2(q[i].r)-s2(q[i].l-1);
}
F(n)printf("%d\n",an[i]);
return 0;
}
一如既往,万事胜意