hdu 1166 线段树 奇兵布阵
#include<iostream>
using namespace std;
const int MAX=;
int tree[(MAX+)*];//n个叶子就有2*n-4*n个节点
int a[MAX+];
int n;
void getup(int root){
return void(tree[root]=tree[root*]+tree[root*+]);//两个孩子分别是root*2 和root*2+1
}
void btree(int l,int r,int root){//建树
if(l==r){
tree[root]=a[l];
return ;
}
int mid=(l+r)>>;
btree(l,mid,root*);
btree(mid+,r,root*+);//因为向下取整 mid必须加一 不然结束不了
getup(root);
}
int myquery(int l,int r,int L,int R,int root){//整个的思想是区间和肯定可以用二分的区间表示
if(l<=L&&r>=R) return tree[root];
int mid=(L+R)>>;
long long sum=;
if(l<=mid) sum+=myquery(l,r,L,mid,root*);//两边相加
if(r>mid) sum+=myquery(l,r,mid+,R,root*+);
return sum;
}
void add(int i,int value,int l,int r,int root){//重点!! 更新的过程
if(l==r) {tree[root]+=value;return ;}
int mid=(l+r)>>;
if(i<=mid) add(i,value,l,mid,root*);
else add(i,value,mid+,r,root*+);
getup(root);
}
int main(){
int t;
cin>>t;
int i=;
while(i<=t){
int flag=;
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
btree(,n,);
char ss[];
while(~scanf("%s",ss)){
if(ss[]=='A'){
int i,value;
scanf("%d %d",&i,&value);
add(i,value,,n,);
}
if(ss[]=='S'){
int i,value;
scanf("%d %d",&i,&value);
add(i,-*value,,n,);
}
if(ss[]=='Q'){
int a ,b;
scanf("%d%d",&a,&b);
if(flag){printf("Case %d:\n",i);flag=;}
printf("%d\n",myquery(a,b,,n,));
}
if(ss[]=='E') break;
}
i++;
}
}
题目链接:acm.hdu.edu.cn/status.php?user=YZBPXX&pid=1166&status=5
hdu 1166 线段树 奇兵布阵的更多相关文章
- 敌兵布阵 HDU 1166 线段树
敌兵布阵 HDU 1166 线段树 题意 这个题是用中文来描写的,很简单,没什么弯. 解题思路 这个题肯定就是用线段树来做了,不过当时想了一下可不可用差分来做,因为不熟练就还是用了线段树来做,几乎就是 ...
- hdu 1166 线段树(sum+单点修改)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- A - 敌兵布阵 HDU - 1166 线段树(多点修改当单点修改)
线段树板子题练手用 #include<cstdio> using namespace std; ; int a[maxn],n; struct Node{ int l,r; long lo ...
- HDU(1166),线段树模板,单点更新,区间总和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 第一次做线段树,帆哥的一句话,我记下来了,其实,线段树就是一种处理数据查询和更新的手段. 然后, ...
- hdu 1166线段树 单点更新 区间求和
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1166 线段树单点更新
等线段树复习完再做个总结 1101 2 3 4 5 6 7 8 9 10Query 1 3Add 3 6Query 2 7Sub 10 2Add 6 3Query 3 10End Case 1:633 ...
- hdu 1166 线段树(单点增减 区间求和)
Sample Input1101 2 3 4 5 6 7 8 9 10Query 1 3Add 3 6Query 2 7Sub 10 2Add 6 3Query 3 10End Sample Outp ...
- HDU 1166 线段树模板&树状数组模板
HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using nam ...
- hdu 1166 线段树 区间求和 +单点更新 CD模板
题目链接 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
随机推荐
- 从无建立一个vue项目
node.js安装 首先安装Node,官网地址 :https://nodejs.org/en/download/ ,进去下载关于符合自己电脑的下载. 具体的Node安装步骤参考地址: https:// ...
- 分布式缓存Redis+Memcached经典面试题和答案
Redis相比memcached有哪些优势? (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 (2) redis的速度比memcached快很多 ( ...
- Oracle笔记(一) Oracle简介及安装
一.轨迹 二.Oracle简介 Oracle是现在全世界最大的数据库提供商,编程语言提供商,应用软件提供商,它的地位等价于微软的地位. Oracle在古希腊神话中被称为“神谕”,指的是上帝的宠儿,在中 ...
- electron api sendInputEvent 源码
electron-master\electron-master\shell\browser\api\atom_api_web_contents.cc // Copyright (c) 2014 Git ...
- 静态static最基础的知识
static静态: 常见修饰的内容: 1.变量: 修饰变量时,叫静态变量或类变量.此变量为类所有随着虚拟机加载类是而加载入方法区,此静态变量为该类所有对象共享,在内存中只有一个副本,它 当且仅当 类的 ...
- ELK展示NGINX访问IP地理位置图
一.设置NGINX日志格式 [root@zabbix_server ~]# vim /etc/nginx/nginx.conf log_format access_json_log '{"@ ...
- IE8"HTML Parsing Error:Unable to modify the parent container element before the child element is closed"错误
一.IE8报下面错误,解决办法:网页错误详细信息消息: HTML Parsing Error: Unable to modify the parent container element before ...
- Summer training #8
A: B:按题意直接暴力找符合题意的数的个数 #include <bits/stdc++.h> #include <cstring> #include <iostream ...
- JS 函数相关的声明调用
// 函数声明方法一 function f (a, b) { return a + b; } // 函数调用 console.log(f(1, 4)); // 函数声明方法二 var num = fu ...
- 最简单之安装JDK
参考:https://www.cnblogs.com/lizhewei/p/11181082.html 1,百度搜索jdk 2,官网下载 jdk-8u161-linux-x64.rpm 或者jdk-8 ...