zoukankan      html  css  js  c++  java
  • bzoj 2743: [HEOI2012]采花

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #define M 1000009
     5 using namespace std;
     6 struct data 
     7 {
     8     int x,y,id;
     9 }c[M];
    10 int a[M],n,m,d,ans,kk[M],head[M],next[M],sum[M];
    11 bool cmp(data a1,data a2)
    12 {
    13     if(a1.x==a2.x)
    14       return a1.y<a2.y;
    15     return a1.x<a2.x;
    16 }
    17 void jia(int a1,int a2)
    18 {
    19     if(!a1)
    20       return;
    21     for(;a1<=n;a1+=a1&-a1)
    22       sum[a1]+=a2;
    23     return;
    24 }
    25 int query(int a1)
    26 {
    27     int su=0;
    28     for(;a1;a1-=a1&-a1)
    29       su+=sum[a1];
    30     return su;
    31 }
    32 int main()
    33 {
    34     scanf("%d%d%d",&n,&d,&m);
    35     for(int i=1;i<=n;i++)
    36       scanf("%d",&a[i]);
    37     for(int i=n;i;i--)
    38       {
    39         next[i]=head[a[i]];
    40         head[a[i]]=i;
    41       }
    42     for(int i=1;i<=d;i++)
    43       jia(next[head[i]],1);
    44     for(int i=1;i<=m;i++)
    45       {
    46         scanf("%d%d",&c[i].x,&c[i].y);
    47         c[i].id=i;
    48       }
    49     sort(c+1,c+m+1,cmp);
    50     int l=1;
    51     for(int i=1;i<=m;i++)
    52       {
    53         for(;l<c[i].x;l++)
    54           {
    55             if(next[l])
    56               jia(next[l],-1);
    57             jia(next[next[l]],1);
    58           }
    59         kk[c[i].id]=query(c[i].y);
    60       }
    61     for(int i=1;i<=m;i++)
    62       printf("%d
    ",kk[i]);
    63     return 0;
    64 }

    排序后树状数组维护。

  • 相关阅读:
    日志处理
    md5加密
    os 模块
    time模块
    函数的进阶
    参数 返回值
    文件操作
    集合 拷贝
    linux如何更快的远程拷贝?scp,tar,rsync?
    修改内核临时端口范围
  • 原文地址:https://www.cnblogs.com/xydddd/p/5304570.html
Copyright © 2011-2022 走看看