zoukankan      html  css  js  c++  java
  • BZOJ 2743 树状数组

    不能用分块。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int Maxn=1000100;
     4 struct Info{int l,r,Id;}Q[Maxn];
     5 int a[Maxn],n,c,m,Last[Maxn],Next[Maxn],d[Maxn],Ans[Maxn];
     6 inline bool Cmp(Info A,Info B) {return A.l>B.l;}
     7 inline int Lowbit(int x) {return x&(-x);}
     8 inline void Add(int x,int v) {for (int i=x;i<=n;i+=Lowbit(i)) d[i]+=v;}
     9 inline int Query(int x) {int Ret=0; for (int i=x;i;i-=Lowbit(i)) Ret+=d[i];return Ret;}
    10 int main()
    11 {
    12     // freopen("c.in","r",stdin);
    13     scanf("%d%d%d",&n,&c,&m);
    14     for (int i=1;i<=n;i++) scanf("%d",&a[i]);
    15     for (int i=1;i<=c;i++) Last[i]=n+1;
    16     for (int i=n;i>=1;i--)
    17     {
    18         Next[i]=Last[a[i]];
    19         Last[a[i]]=i;
    20     }
    21     Next[n+1]=n+1;
    22     for (int i=1;i<=m;i++) scanf("%d%d",&Q[i].l,&Q[i].r),Q[i].Id=i;
    23     sort(Q+1,Q+m+1,Cmp); int j=n;
    24     for (int i=1;i<=m;i++)
    25     {
    26         while (j && j>=Q[i].l) Add(Next[Next[j]],-1),Add(Next[j--],1);
    27         Ans[Q[i].Id]=Query(Q[i].r);
    28     }
    29     for (int i=1;i<=m;i++) printf("%d
    ",Ans[i]);
    30     return 0;
    31 }
    C++
  • 相关阅读:
    less 28-31
    less27 27a
    sqli 26 26a
    sqli lab 25 25a
    kail 更新源
    sqli lab 23 、24
    less 20 21 22
    less18 19
    less 17
    数字类型,字符串类型,列表类型
  • 原文地址:https://www.cnblogs.com/yyjxx2010xyu/p/5917686.html
Copyright © 2011-2022 走看看