线段树 

 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 #define N 200010
 5 int sum[N];
 6 void build(int l,int r,int root){
 7     if(l==r)scanf("%d",&sum[root]);
 8     else {
 9         int mid=(l+r)/2;
10         build(l,mid,root*2);
11         build(mid+1,r,root*2+1);
12         sum[root]=sum[root*2]+sum[root*2+1];
13     }
14 }
15 void add(int i,int j,int l,int r,int root){
16     if(l==r)sum[root]+=j;
17     else {
18         int mid=(r+l)/2;
19         if(i<=mid)add(i,j,l,mid,root*2);
20         else add(i,j,mid+1,r,root*2+1);
21         sum[root]=sum[root*2]+sum[root*2+1];
22     }
23 }
24 void query(int x,int y,int l,int r,int root,int &a){
25     if(x<=l&&y>=r){
26          a+=sum[root];
27          return;
28     }
29     int mid=(r+l)/2;
30     if(x<=mid)query(x,y,l,mid,root*2,a);
31     if(y>mid)query(x,y,mid+1,r,root*2+1,a);
32 }
33 int main(){
34     //freopen("test.txt","r",stdin);
35     int t,n,q,x,y,case1=0;
36     char s[7];
37     scanf("%d",&t);
38     while(t--){
39         case1++;
40         printf("Case %d:\n",case1);
41         scanf("%d",&n);
42         build(1,n,1);
43         while(scanf("%s",s)!=EOF){
44             if(s[0]=='E')break;
45             scanf("%d%d",&x,&y);
46             switch (s[0]){
47                 case 'Q':q=0;query(x,y,1,n,1,q);printf("%d\n",q);break;
48                 case 'A':add(x,y,1,n,1);break;
49                 case 'S':add(x,-y,1,n,1);break;
50             }
51         }
52     }
53     return 0;
54 }

转载于:https://www.cnblogs.com/Mr-Xu-JH/p/3880733.html

HDU 1166(线段树)相关推荐

  1. 敌兵布阵 HDU - 1166 (线段树)

    线段树模板题: 1 #include<iostream> 2 #include<vector> 3 #include<string> 4 #include<c ...

  2. HDU 1166 线段树

    敌兵布阵 题目链接 大意:给你一个数列,和三个操作, Query操作为查询从i到j之间的数的和 Add操作为第i个数加j Sub操作为第i个数减j 要求每次Query操作你给他一个正确的回答 大概思路 ...

  3. POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新

    直接将这3题 放一起了  今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...

  4. hdu 5367(线段树+区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5367 官方题解: 对于求"高山脉"长度,可以利用线段树.树节点中保存左高度连续长度 ...

  5. hdu 5266(线段树+LCA)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5266 解题思路: 考虑dfs序,通过在简单的证明可知L~R的LCA为L ~R 中dfs序较小的那个位置 ...

  6. hdu 5124(线段树区间更新+lazy思想)

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 题意:区间覆盖次数问题. 解题思路:线段树水之. #include<iostream> #in ...

  7. HDU - 4578Transformation——线段树+区间加法修改+区间乘法修改+区间置数+区间和查询+区间平方和查询+区间立方和查询

    [题目描述] HDU - 4578Transformation Problem Description Yuanfang is puzzled with the question below: The ...

  8. poj 2777 AND hdu 5316 线段树

    区间染色问题,用线段树可以解决.颜色总类不多,故考虑用二进制数的每一位表示一种颜色,然后父节点的颜色就是孩子节点颜色"或"起来,加上lazy标记,轻松AC. poj 2777: 1 ...

  9. HDU 5238 线段树+数论

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=5238. 题解:给你长度为n的操作序列,和m组操作求每组操作的模29393的值.这道题直接显然是没有前途的, ...

最新文章

  1. hwclock date
  2. Swift 基本基本运算符
  3. 找到了一些很好的算法书和试题
  4. ​在电网工作,有多高大上?
  5. 抓住那只喵(HTML5-神经猫)
  6. python测网络连通性_网络工程师如何在ensp模拟器上玩python自动化配置交换机。...
  7. switch语句判断范围_MQL5从入门到精通【第四章】(一)条件判断语句
  8. Xamarin.Android 引导页
  9. Java 并发和多线程(一) Java并发性和多线程介绍[转]
  10. C盘软件(应用)搬家瘦身
  11. 网络负载率计算公式 linux,如何理解Linux CPU负载率的计算方式
  12. php微信公众号退款,微信公众号支付--4--微信退款
  13. 计算机协会维修照片,照片门事件后,当年那个毁了陈冠希的电脑修理员,如今变成这样!...
  14. 什么是二进制,进制之间是如何转换的,浅显易懂的,一看就会
  15. 【281期】面试官问:淘宝七天自动确认收货,可以怎么实现?
  16. win10自动更新修复与关闭
  17. Android 高仿豌豆荚 一键安装app 功能 实现
  18. 关于android有道词典的修改
  19. python快递费用计算_python调用快递鸟api实现查快递
  20. 微信小程序AR扫描识别图(支持多图片)加载3D模型及其动画

热门文章

  1. 细分tf.multiply()、tf.matmul()、tf.scalar_mul()函数
  2. 【OpenCV的C++教程2】加载、修改、保存图像
  3. 【408预推免复习】操作系统引论
  4. 【深度学习】深度学习安防的探索与实践
  5. 【Deep Learning笔记】循环神经网络
  6. 并查集详解(从引入到代码)
  7. oracle rac 通信端口,修改oracle 10g rac监听端口号为1523的步骤
  8. @RestController和@Controller区别
  9. PHP 会话 线程 进程,接上节我们来了解了解多进程的一些基础进程 / 线程 / 多进程 / 父进程 / 子进程 / 会话 / 控制终端等...
  10. android p获取通话记录_[android] 取得最近通话记录的方法