HDU 1166 敌兵布阵 线段树区间求和 更改
水
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<stack>
#include<cmath>
#include<queue>
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define ll long long
#define clc(a,b) memset(a,b,sizeof(a))
const int maxn=; int ans;
struct node
{
int left,right,sum;
int mid()
{
return (left+right)>>;
}
}tree[maxn*]; void build_tree(int l,int r,int o)
{
tree[o].left=l;
tree[o].right=r;
if(l==r)
{
scanf("%d",&tree[o].sum);
return ;
}
int mid=tree[o].mid();
build_tree(l,mid,o<<);
build_tree(mid+,r,o<<|);
tree[o].sum=tree[o<<].sum+tree[o<<|].sum;
} void query(int l,int r,int o,int L,int R)
{
if(L<=l&&r<=R)
{
ans+=tree[o].sum;
return ;
}
int mid=tree[o].mid();
if(R<=mid)
query(l,mid,o<<,L,R);
else if(L>mid)
query(mid+,r,o<<|,L,R);
else
{
query(l,mid,o<<,L,R);
query(mid+,r,o<<|,L,R);
}
} void update(int l,int r,int o,int pos,int add)
{
if(l==r)
{
tree[o].sum+=add;
return ;
}
int mid=tree[o].mid();
if(pos<=mid)
{
update(l,mid,o<<,pos,add);
}
else
update(mid+,r,o<<|,pos,add);
tree[o].sum=tree[o<<].sum+tree[o<<|].sum;
} int main()
{
int t,n,cnt;
int a,b;
char str[];
cnt=;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
build_tree(,n,);
printf("Case %d:\n",cnt++);
while(scanf("%s",str))
{
if(str[]=='E')
break;
scanf("%d%d",&a,&b);
if(str[]=='Q')
{
ans=;
query(,n,,a,b);
printf("%d\n",ans);
}
else if(str[]=='A')
update(,n,,a,b);
else
update(,n,,a,-b);
}
}
return ;
}
HDU 1166 敌兵布阵 线段树区间求和 更改的更多相关文章
- HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 1166 敌兵布阵 线段树区间修改、查询、单点修改 板子题
题目链接:敌兵布阵 题目: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视 ...
- hdu 1116 敌兵布阵 线段树 区间求和 单点更新
线段树的基本知识可以先google一下,不是很难理解 线段树功能:update:单点增减 query:区间求和 #include <bits/stdc++.h> #define lson ...
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- hdu 1166 敌兵布阵 线段树 点更新
// hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...
- HDU 1166 敌兵布阵(线段树单点更新,板子题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1166 敌兵布阵(线段树单点更新)
敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...
- HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1166 敌兵布阵 (线段树、单点更新)
敌兵布阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
随机推荐
- php中utf8 与utf-8 与utf8 无BOM
utf8 与utf-8 相信很多程序员刚开始也会有这样的疑惑,如题,我也是. 其实,他们可以这样来区分. 一.在php和html中设置编码,请尽量统一写成“UTF-8”,这才是标准写法,而 ...
- hadoop完全分布式安装(转)
1 安装Vmware WorkStation软件 有些人会问,为何要安装这个软件,这是一个VM公司提供的虚拟机工作平台,后面需要在这个平台上安装linux操作系统.具体安装过程网上有很多资料,这里不作 ...
- windows下常用快捷键
windows下常用快捷键: 显示桌面: win徽标+D 打开资源管理器: win徽标+E 打开任务管理器: Ctrl+Alt+delete 任务切换: Alt+Tab 应用程序中窗口之间的切换: C ...
- LocalContainerEntityManagerFactoryBean
http://doc.okbase.net/liuyitian/archive/109276.html
- C和BlockCode
在使用code block的时候,需要先build,然后再run,否则run的还是上次编译的内容.
- ViewController 之间设置转场动画
AddOrEditViewController *addOrEdit = [[AddOrEditViewController alloc] init]; CATransition *transitio ...
- 刷漆(Codechef October Challenge 2014:Remy paints the fence)
[问题描述] Czy做完了所有的回答出了所有的询问,结果是,他因为脑力消耗过大而变得更虚了:).帮助Czy恢复身材的艰巨任务落到了你的肩上. 正巧,你的花园里有一个由N块排成一条直线的木板组成的栅栏, ...
- css 垂直同步的几种方式
第一种: 利用 display:table 和 display:table-cell 的方式 这种方式就好像将table布局搬过来一样,相信大家对table的td还是有印象的,它的内容是可以设置垂直居 ...
- uitableviewcell 自适应大小 参考
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { ...
- jquery怎么实现左右滑动的问题
var len = $("#b span").length, curindex = 0; $("#leftRun").click(function(){ if( ...