问题概述:先输入一个数n,接下来输入n个数,然后输入一个指令,其中(Add i j)i和j为正整数,表示第i个营地增加j个人,(Sub i j)i和j为正整数,表示第i个营地减少j个人,(Query i j)i和j为正整数,i<=j,表示询问第i到第j个营地的总人数,(End)表示结束,这条命令在每组数据最后出现,对于每个Query询问,输出该区间中的总人数(T组实例)

输入样例:                                                对应输出:

1                                                                Case 1:

10                                                               6

1 2 3 4 5 6 7 8 9 10                                  3

Query 1 3                                                  59

Add 3 6

Query 2 7

Sub 10 2

Add 6 3

Query 3 10

End

大神:http://blog.csdn.net/int64ago/article/details/7429868

解析在代码中

#include<stdio.h>
#include<string.h>
int n;
int c[50005];
void Update(int x, int k);
int Print(int k);
int lowbit(int k)
{return k&-k;   /*把k的二进制的高位1全部清空,只留下最低位的1*/
}
int main(void)
{int T, cas, i, a, b;char str[12];scanf("%d", &T);cas = 1;while(T--){memset(c, 0, sizeof(c));    /*将数组的所有元素全部重置为0*/scanf("%d", &n);for(i=1;i<=n;i++){scanf("%d", &a);Update(a, i);        /*每输入一个数,更新一次树状数组*/}printf("Case %d:\n", cas++);while(scanf("%s", str), strcmp(str, "End")!=0){scanf("%d%d", &a, &b);if(str[0]=='A')Update(b, a);if(str[0]=='S')Update(-b, a);if(str[0]=='Q')printf("%d\n", Print(b)-Print(a-1));}}return 0;
}void Update(int x, int k)  /*树状数组的更新*/
{while(k<=n){c[k] += x;k += lowbit(k);}
}int Print(int k)       /*查询1-k的区间和*/
{int ans;ans = 0;while(k>0){ans += c[k];k -= lowbit(k);}return ans;
}

树状数组--快捷的线段树相关推荐

  1. 【BZOJ2441】【中山市选2011】小W的问题(树状数组+权值线段树)

    传送门 由于一个www不好统计,我们考虑拆成222个vvv来统计,也就是"312"和"213"这样的 把答案统计在"2"处,两边相乘就是答案 ...

  2. HDU 4417 Super Mario(线段树||树状数组+离线操作 之线段树篇)

    Mario is world-famous plumber. His "burly" figure and amazing jumping ability reminded in ...

  3. 数据结构 【树状数组】【线段树】【珂朵莉树】

    一.区间合并 1.AcWing245你能回答这些问题吗 分析: 线段树.维护四个变量,即可实现区间合并. mx 区间最大连续子段和 mx_l 以区间左端点为左界的最大连续字段和 mx_r 以区间左端点 ...

  4. 2019.01.21 bzoj2441: [中山市选2011]小W的问题(树状数组+权值线段树)

    传送门 数据结构优化计数菜题. 题意简述:给nnn个点问有多少个www型. www型的定义: 由5个不同的点组成,满足x1<x2<x3<x4<x5,x3>x1>x2 ...

  5. 洛谷 P3368 【模板】树状数组 2(线段树区间加单点查找)

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含N个 ...

  6. HDU 4325 离散化+树状数组 或者 不使用树状数组

    题意:给出一些花的开放时间段,然后询问某个时间点有几朵花正在开放. 由于ti<1e9,我们需要先将时间离散化,然后将时间点抽象为一个数组中的点,显然,我们需要进行区间更新和单点查询,可以考虑线段 ...

  7. php 树状数组公式,PY个树状数组

    树状数组比较简单,于是就挑它下手了... 于是生活终于也对咱下手了... 要讲的就两个东西,一个是开数组,全局变量写最前面,数组是这么开的: f=[0 for i in range(500005)] ...

  8. 吊打线段树的超级树状数组

    你是否讨厌线段树那冗长的代码?你是否还在因为线段树的难调试而满头♂dark汗?那么,请不要错过!超级树状数组特价!只要998,只要998! ##¥--#--¥%--&%¥--ER#%$#$#^ ...

  9. VK Cup 2012 Qualification Round 2 C. String Manipulation 1.0 线段树 or 树状数组+二分

    http://codeforces.com/problemset/problem/159/C 题意: 给你一个字符串s,给出一个数k,k倍的s串组成新串str.然后给出n个操作,每个操作对应着pi,c ...

最新文章

  1. 030_jQuery Ajax的get方法
  2. js实现返回顶部功能的解决方案
  3. 【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用
  4. 函数计算如何帮助语雀构建稳定且安全的业务架构?
  5. Java基础05 break和continue比较区别
  6. Spring Boot整合 Thymeleaf 模板引擎
  7. 8月7日晚八点分享-推荐系统面试/概览
  8. EPUB阅读工具-读者推荐
  9. 我的数据分析师转型之路,从零到阿里数据分析师
  10. 并联串联混合的电压和电流_并联电阻的计算公式(附各种并联电阻网络图解)...
  11. 怎么彻底卸载cad2017_怎么彻底卸载删除cad
  12. OpenCV/kornia/Pillow/Halcon/NI Vision/MIL/*计算机视觉资料汇总
  13. 个人赛 A 题 传球游戏(ball)
  14. [分享] 兰迪·波许教授的最后一课[PDF/PPT/AVI]
  15. 从来没有一种工作叫:钱多事少离家近,位高权重责任轻
  16. [剑指offer]顺时针打印矩阵
  17. Oracle的子查询和程序包上机1
  18. STM32_HAL库_常用函数库
  19. 毕业论文记录——排版
  20. Macromedia的历史

热门文章

  1. python 在线培训费用-Python人工智能在线培训班学费多少钱?
  2. 为何python不好找工作-为什么说Python不好找工作?原因在这里!
  3. 在哪里学python-python在哪学
  4. python就业方向-Python的5大就业方向,薪资诱人前景好!
  5. 零基础学python还是c语言-零基础学Python之前需要学c语言吗
  6. python网课视频下载-python老男孩网课22期视频教程全
  7. 【语音识别基础】总有一天你会用到,嗯,没有公式~
  8. JavaScript面向对象之构造函数
  9. iview表单校验上传图片成功后,提示文字不消失
  10. 用jQuery做点击下箭头改变方向