[SDOI2009][bzoj1878] HH的项链 [莫队模板题]

Posted Orion545

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[SDOI2009][bzoj1878] HH的项链 [莫队模板题]相关的知识,希望对你有一定的参考价值。

题面:

传送门

思路:

就是一道莫队的模板题目......

开一个1000000的数组记录每个数出现的次数,然后每次从1到0或者从0到1更新答案

莫队讲解看这里:莫队

Code:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 inline int read(){
 8     int re=0,flag=1;char ch=getchar();
 9     while(ch>\'9\'||ch<\'0\'){
10         if(ch==\'-\') flag=-1;
11         ch=getchar();
12     }
13     while(ch>=\'0\'&&ch<=\'9\') re=(re<<1)+(re<<3)+ch-\'0\',ch=getchar();
14     return re*flag;
15 }
16 int n,m,cnt[1000010],tot=0,x[50010],curl,curr,block,ans[200010];
17 struct query{
18     int l,r,i;
19 }a[200010];
20 bool cmp(query l,query r){
21     if(l.l/block!=r.l/block) return (l.l/block)<(r.l/block);
22     else return l.r<r.r;
23 }
24 void add(int i){
25     cnt[x[i]]++;if(cnt[x[i]]==1) tot++;
26     //cout<<"add "<<i<<" "<<x[i]<<" "<<cnt[x[i]]<<"\\n";
27 }
28 void erase(int i){
29     cnt[x[i]]--;if(!cnt[x[i]]) tot--;
30     //cout<<"erase "<<i<<" "<<x[i]<<" "<<cnt[x[i]]<<"\\n";
31 }
32 int main(){
33     //freopen("diff.in","r",stdin);
34     //freopen("diff.out","w",stdout);
35     int i;
36     n=read();for(i=1;i<=n;i++) x[i]=read();block=sqrt(n);
37     //cout<<"input one complete "<<n<<" "<<i<<"\\n";
38     m=read();for(i=1;i<=m;i++) a[i].l=read(),a[i].r=read(),a[i].i=i;
39     //cout<<"input two complete "<<m<<" "<<i<<"\\n";
40     sort(a+1,a+m+1,cmp);curl=a[1].l;curr=a[1].r;
41     for(i=a[1].l;i<=a[1].r;i++) add(i);
42     ans[a[1].i]=tot;
43     for(i=2;i<=m;i++){
44         while(curl<a[i].l) erase(curl++);
45         while(curl>a[i].l) add(--curl);
46         while(curr<a[i].r) add(++curr);
47         while(curr>a[i].r) erase(curr--);
48         ans[a[i].i]=tot;
49         //cout<<"now "<<curl<<" "<<curr<<"\\n";
50     }
51     for(i=1;i<=m;i++) printf("%d\\n",ans[i]);
52 }
53 

 

以上是关于[SDOI2009][bzoj1878] HH的项链 [莫队模板题]的主要内容,如果未能解决你的问题,请参考以下文章

[BZOJ1878][SDOI2009]HH的项链

BZOJ1878 [SDOI2009] HH的项链

[bzoj1878] [SDOI2009]HH的项链(树状数组+离线)

BZOJ1878: [SDOI2009]HH的项链[树状数组 离线]

BZOJ-1878: [SDOI2009]HH的项链(莫队算法)

bzoj 1878: [SDOI2009]HH的项链