• bzoj 1878: [SDOI2009]HH的项链


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

    将读入离线处理,先排序,树状数组维护。

  • 相关阅读:
    [转]基于S2SH框架的项目—antlr-2.7.2.jar包冲突问题
    输入法那没有小键盘的图标解决方法
    Chrome百度不显示中文字体
    转:数据库范式(1NF 2NF 3NF BCNF)
    转:海明纠错码
    奇阶魔方阵
    字符串的模式匹配
    红黑树
    排序算法总结
    关于面试总结9-接口测试面试题
  • 原文地址:https://www.cnblogs.com/xydddd/p/5281991.html
Copyright © 2020-2023  润新知