hdu 1166 敌兵布阵_线段树
题意:略
思路:这题是单点更新,如果是减少的话,直接把数据变成负加上去就行了。
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 50010
int n,ans;
struct{
int l,r,value;
}tree[MAXN<<2];
void Build(int l,int r,int id){
tree[id].l=l;
tree[id].r=r;
tree[id].value=0;
if(l!=r){
int mid=(l+r)>>1;
Build(l,mid,id<<1);
Build(mid+1,r,id<<1|1);
}
}
void update(int l,int value,int id){
if(tree[id].l==tree[id].r&&tree[id].l==l){
tree[id].value+=value;
return;
}
int mid=(tree[id].l+tree[id].r)>>1;
if(l<=mid)
update(l,value,id<<1);
else
update(l,value,id<<1|1);
tree[id].value=tree[id<<1].value+tree[id<<1|1].value;
}
void query(int l,int r,int id){
if(tree[id].l==l&&tree[id].r==r){
ans+=tree[id].value;
return;
}
int mid=(tree[id].l+tree[id].r)>>1;
if(r<=mid)
query(l,r,id<<1);
else if(l>mid)
query(l,r,id<<1|1);
else{
query(l,mid,id<<1);
query(mid+1,r,id<<1|1);
}
}
int main(int argc, char** argv) {
int Cas=1,t,x,y,n,i,value;
char str[20];
scanf("%d",&t);
while(t--){
scanf("%d",&n);
Build(1,n,1);
for(i=1;i<=n;i++){
scanf("%d",&value);
update(i,value,1);
}
printf("Case %d:\n",Cas++);
while(scanf("%s",str),strcmp(str,"End")){
scanf("%d%d",&x,&y);
if(strcmp(str,"Add")==0)update(x,y,1);
else if(strcmp(str,"Sub")==0)update(x,-y,1);
else{
ans=0;
query(x,y,1);
printf("%d\n",ans);
}
}
}
return 0;
}
hdu 1166 敌兵布阵_线段树的更多相关文章
- hdu 1166敌兵布阵(线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) M ...
- hdu 1166 敌兵布阵 (线段树单点更新)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1166 敌兵布阵(线段树/树状数组模板题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1166——敌兵布阵——————【线段树单点增减、区间求和】
敌兵布阵 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 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 Submis ...
- HDU 1166 敌兵布阵(线段树模板题)
题目链接: 传送门 敌兵布阵 Time Limit: 2000MS Memory Limit: 32768 K Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头 ...
- hdu 1166 敌兵布阵【线段树】(求给定区间和)
题目链接:https://vjudge.net/contest/182746#problem/B 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1166 敌兵布阵 (线段树模版题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
随机推荐
- Hibernate 配置详解(8)
hibernate.generate_statistics 这个配置大家应该都很熟悉,用于开启Hibernate统计信息,便于对Hibernate相关性能调试提供数据依据.在开发过程当中,可以把这个选 ...
- \s+(?<request_time>\d+(?:\.\d+)?)\s+ 解释
<pre name="code" class="html"><pre name="code" class="ht ...
- JavaEE Tutorials (28) - Duke书店案例研究示例
28.1Duke书店的设计和架构43828.2Duke书店接口439 28.2.1Book Java持久化API实体439 28.2.2Duke书店中使用的企业bean440 28.2.3Duke书店 ...
- Entity Framework 技术参考:http://kb.cnblogs.com/zt/ef/
Entity Framework 技术参考:http://kb.cnblogs.com/zt/ef/
- eclipse中误删了servers文件
Eclipse中误删了servers文件,需要重新添加tomcat服务器,这时就会遇到在New Server对话框中选择了Tomcat 6/7后却无法单击"Next"按钮的问题,如 ...
- 2014年百度之星资格赛第二题Disk Schedule
Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取. 然而,在现实中,这样的做法非常复杂. 我们考虑一个相对简单的场景. ...
- Ruby中,&:(ampersand colon)的用法
前几日看Ruby代码,发现一个奇怪的用法,如下: a=['a', 'b', 'c'].map! &:upcase p a #["A", "B", &qu ...
- rhel5.8安装mysql测试
MySQL-rhel5.8 安装:在Linux下安装MySQL有三种方式:第一种以rpm的二进制文件分个安装,第二种是自己编译源码后安装,最后一种是以二进制tar.gz文件来安装(这种安装方式下载安装 ...
- 图文讲解基于centos虚拟机的Hadoop集群安装,并且使用Mahout实现贝叶斯分类实例 (7)
接下来,我们开启hadoop集群. 如果之前打开过Hadoop,可能会发生lock的问题,解决方案:http://blog.csdn.net/caoshichaocaoshichao/article/ ...
- Android studio教程:[6]创建多个Activity
通常来说,一个android应用程序不止一个Activity(活动),更不止一个界面.于是需要创建多个Activity来满足应用程序的要求,这里我将告诉大家如何添加新的Activity,并实现Acti ...