zoukankan      html  css  js  c++  java
  • HDU 1556-Color the ball-树状数组

      树状数组的成段更新。

    首先要明白,insert函数的意思是更新某一点值,query函数的意思是从起点到某一点的和。

    更新[a,b]段时,在a点插入一个1,在b+1点插入一个-1。这时,query(a)...query(b)都是1,而query(1)...query(a-1),query(b+1)...query(N)都是0。

    这样就跟成段更新的效果相同。

     1 #include <cstdio>
     2 #include <cstring>
     3 
     4 using namespace std;
     5 
     6 const int maxn = 100010;
     7 int C[maxn];
     8 int N;
     9 
    10 int lowbit(int x)
    11 {
    12     return x&(-x);
    13 }
    14 
    15 int Query(int x)
    16 {
    17     int rtn=0;
    18     while(x > 0)
    19     {
    20         rtn += C[x];
    21         x -= lowbit(x);
    22     }
    23     return rtn;
    24 }
    25 
    26 void Insert(int x,int num)
    27 {
    28     while(x <= N)
    29     {
    30         C[x] += num;
    31         x += lowbit(x);
    32     }
    33 }
    34 
    35 int main()
    36 {
    37     while(scanf("%d",&N) && N)
    38     {
    39         memset(C,0,sizeof C);
    40         for(int i=0;i<N;i++)
    41         {
    42             int a,b;
    43             scanf("%d%d",&a,&b);
    44             Insert(a,1);
    45             Insert(b+1,-1);
    46         }
    47         for(int i=1;i<=N;i++)
    48             printf("%s%d",i==1?"":" ",Query(i));
    49         printf("
    ");
    50     }
    51 }
  • 相关阅读:
    npm 发包流程
    iframe嵌入第三方视频链接自动播放
    微信小程序 接入腾讯地图的两种写法
    微信小程序 生命周期
    css 传送阵
    微信小程序 音频播放器
    微信小程序 mpvue 使用vant-weapp
    微信小程序 使用mpvue
    ajax
    布局问题
  • 原文地址:https://www.cnblogs.com/helica/p/5281482.html
Copyright © 2011-2022 走看看