zoukankan      html  css  js  c++  java
  • 【洛谷 p3374】模板-树状数组 1(数据结构)

    题目:已知一个数列,你需要进行下面两种操作:1.将某一个数加上x;2.求出某区间每一个数的和。

    解法:树状数组求前缀和。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 using namespace std;
     6 
     7 const int N=500010;
     8 int n;
     9 int c[N];
    10 
    11 int lowbit(int x) {return x&-x;}
    12 void ins(int x,int d)
    13 {
    14     for (int i=x;i<=n;i+=lowbit(i))
    15       c[i]+=d;
    16 }
    17 int query(int x)
    18 {
    19     int h=0;
    20     for (int i=x;i>=1;i-=lowbit(i))
    21       h+=c[i];
    22     return h;
    23 }
    24 int main()
    25 {
    26     int m,x,y,k;
    27     scanf("%d%d",&n,&m);
    28     for (int i=1;i<=n;i++)
    29     {
    30       scanf("%d",&x);
    31       ins(i,x);
    32     }
    33     while (m--)
    34     {
    35       scanf("%d%d%d",&k,&x,&y);
    36       if (k==1) ins(x,y);
    37       else
    38       {
    39         if (x>y) {int t;t=x,x=y,y=t;}
    40         printf("%d
    ",query(y)-query(x-1));
    41       }
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    [HDU 2089]不要62
    [WC 2011]Xor
    [BJOI 2011]元素
    [NOIp 2014]解方程
    [UVa 1326]Jurassic Remains
    [BZOJ 2152]聪聪可可
    [IOI 2011]Race
    [测试题]打地鼠
    [POJ 2828]Buy Tickets
    [测试题]gene
  • 原文地址:https://www.cnblogs.com/konjak/p/6076499.html
Copyright © 2011-2022 走看看