zoukankan      html  css  js  c++  java
  • NYOJ 116士兵杀敌(二)(树状数组)(插点问线)

     二叉索引数(树状数组)
    【任务】
    对于数组A[1..n],在O(logn)的时间内完成以下任务:
    (1) Add(x,d):让A[x]增加 d;
    (2) Query(L,R):计算A[L]+...+A[R]的和;
    (这题可作为树状数组的模板)
     1 #include<cstdio>
     2 #define Max 1000005
     3 int C[Max];
     4 int N,M;
     5 int lowbit(int x)
     6 {
     7     return x & -x;
     8 }
     9 int sum(int i)//计算前i项和
    10 {
    11     int ret = 0;
    12     while(i>0)
    13     {
    14         ret += C[i];
    15         i -= lowbit(i);
    16     }
    17     return ret;
    18 }
    19 void add(int x,int n)//A[x]元素增加n,即C[x]的前x项和加n
    20 {
    21     while(x <= N)
    22     {
    23         C[x] += n;
    24         x += lowbit(x);
    25     }
    26 }
    27 
    28 int main()
    29 {
    30    //freopen("in.txt","r",stdin);
    31     int i,a,b;
    32     char s[9];
    33     scanf("%d%d",&N,&M);
    34     for(i=1; i<=N; i++)
    35     {
    36         scanf("%d",&a);
    37         add(i,a);
    38     }
    39     for(i=0; i<M; i++)
    40     {
    41         scanf("%s%d%d",s,&a,&b);    
    42         if(s[0] == 'A')
    43             add(a,b);
    44         else
    45             printf("%d
    ",sum(b)-sum(a-1));
    46     }
    47     return 0;
    48 }
    View Code
  • 相关阅读:
    Mac Mysql 修改初始化密码
    网址收藏
    Xcode 模拟器复制解决方案
    ios优秀的第三方框架
    CocoaPods第三方库管理工具
    ios网络请求
    java面试宝典
    SQL分表
    FastDFS+Nginx+Module
    分布式文件系统FastDFS架构认知
  • 原文地址:https://www.cnblogs.com/qiu520/p/3197875.html
Copyright © 2011-2022 走看看