• 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++
  • 相关阅读:
    字体
    当前li的同级且不包含当前li
    溢出用省略号显示
    .NET Core中使用Cookie步骤
    .NET Core中使用Session步骤
    asp.net core 读取配置
    Asp.Net Core run on Ubuntu
    .net core中使用GB2312编码
    ubuntu mysql 安装
    samba的安装
  • 原文地址:https://www.cnblogs.com/yyjxx2010xyu/p/5917686.html
Copyright © 2020-2023  润新知