BZOJ 1878 HH的项链

来源:互联网 发布:js屏蔽鼠标右键 编辑:程序博客网 时间:2024/04/29 15:19
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>#include<iostream>#include<vector>using namespace std;#define MAXM 200001#define MAXN 1000001struct ASK{int l,r,num;};ASK b[MAXM];int N,M,a[MAXN],ans[MAXM],S[MAXN],hash[MAXN],last[MAXN];bool cmp(ASK X,ASK Y){return X.r<Y.r;}int lowbit(int x){return x&(-x);}void add(int x,int v){      while(x<=N+1)      {            S[x]+=v;            x+=lowbit(x);      }}int getsum(int x){      int tmp=0;      while(x>0)      {            tmp+=S[x];            x-=lowbit(x);      }      return tmp;}int main(){      //freopen("sequence.in","r",stdin);      //freopen("sequence.out","w",stdout);  scanf("%d",&N);  for(int i=1;i<=N;i++)  {            int A;            scanf("%d",&A);            hash[i]=last[A]+1;            last[A]=i;  }  scanf("%d",&M);  for(int i=1;i<=M;i++)  {scanf("%d%d",&b[i].l,&b[i].r);   b[i].num=i;  }      sort(b+1,b+1+M,cmp);      int now=1;      for(int i=1;i<=M;i++)      {            while(now<=b[i].r)            {                  now++;                  add(hash[now-1],1);                  add(now,-1);            }            ans[b[i].num]=getsum(b[i].l);      }  for(int i=1;i<=M;i++)printf("%d\n",ans[i]);      //system("pause");      return 0;}

0 0
原创粉丝点击