hdu 1166 敌兵布阵(线段树,树状数组)
http://acm.hdu.edu.cn/showproblem.php?pid=1166
#include<iostream>
#include<cstdio>
#include<cstring> using namespace std; struct node
{
int l; //左起点
int r; //右终点
int sum; //区间数据总和
}; node p[200004];
int a[50001];
int n; void biuld(int k, int l, int r) //创建
{
int mid;
p[k].l = l;
p[k].r = r;
if(l == r)
{
p[k].sum = a[l];
return ;
}
mid = (l+r)/2;
biuld(k*2,l,mid);
biuld(k*2+1,mid+1,r);
p[k].sum = p[k*2].sum+p[k*2+1].sum;
return ;
} int find(int k, int l, int r) //查找区间的值
{
int mid;
if(p[k].l==l && p[k].r==r) //找到这个区间
{
return p[k].sum;
}
mid = (p[k].l+p[k].r)/2;
if(l>mid) //在中点的右孩子
{
return find(k*2+1,l,r);
}
if(r<=mid) //在中点得左孩子
{
return find(k*2,l,r);
}
return find(k*2,l,mid) + find(k*2+1,mid+1,r);
} void update(int k, int x, int y) //更新数据
{
int mid;
if(p[k].l==x && p[k].r==x) //如果找到这个点
{
p[k].sum = y; //更新数据
return ;
}
mid = (p[k].l+p[k].r)/2;
if(x<=mid)
{
update(k*2,x,y);
}
else
{
update(k*2+1,x,y);
}
p[k].sum=p[k*2].sum+p[k*2+1].sum;
return ;
} int main()
{
int t,i,k,x,y,m;
char cz[7];
scanf("%d",&t);
k = 0;
while(t--)
{
k++;
scanf("%d",&n);
for(i = 1; i <= n; i++)
{
scanf("%d",&a[i]);
}
biuld(1,1,n);
printf("Case %d:\n",k);
while(1)
{
scanf("%s",&cz);
if(cz[0]=='E')
{
break;
}
scanf("%d%d",&x,&y);
switch(cz[0])
{
case 'Q':
{
printf("%d\n",find(1,x,y));
break;
}
case 'A':
{
a[x]+=y;
m = a[x];
update(1,x,m);
break;
}
case 'S':
{
a[x]-=y;
m = a[x];
update(1,x,m);
}
}
}
} return 0;
}
hdu 1166 敌兵布阵(线段树,树状数组)的更多相关文章
- 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 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 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 ...
- hdu 1166 敌兵布阵 线段树区间修改、查询、单点修改 板子题
题目链接:敌兵布阵 题目: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视 ...
- HDU 1166 敌兵布阵 线段树
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 1166 - 敌兵布阵 - [线段树][树状数组]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
随机推荐
- 【ActiveMQ】设置自动重连
<property name="brokerURL" value="tcp://localhost:61616"/> <property na ...
- Axure使用
(一) Axure rp的界面 1-主菜单工具栏 大部分类似office软件,不做详细解释,鼠标移到按钮上都有对应的提示. 2-主操作界面 绘制产品原型的操作区域,所有的用到的元件都拖到该区域. 3 ...
- Java 取得当前日期之后N天的日期 zz
链接地址:http://blog.sina.com.cn/s/blog_483486840100vrjn.html public static String afterNDay(int n){ ...
- SAE部署Java应用
链接地址:http://blog.csdn.net/shuixin536/article/details/9031335 SAE为开发者提供了非常宽松的开发环境,你甚至不用做任何特别定制就能将各种Ja ...
- C++之类与对象(1)
下个阶段,我将讲解C++中面向对象的部分,也是C++对C语言改进的最重要的部分.以前C++也被叫做是"带类的C".今天主要讲类的构成,成员函数以及对象的定义和使用. 1.其实这一节 ...
- OpenCV配置使用版
在VS2010环境中应用Opencv,网上找到了很多配置方法,但大多都是老版本的,很多新手面对最新版本的Opencv无从下手,就给新手童鞋写了这么一篇超级详细的配置攻略,贴上来共享.要强调一点的就是, ...
- Android——用户登陆及用户名和密码的保存
Android——用户登陆及用户名和密码的保存 在之前的学习过程中已经将Android学习完了,但是在后面将近一年的时间里都没有进行过Android开发,所以对Android的所有的知识点又有点忘 ...
- word2vec代码解释
以前看的国外的一篇文章,用代码解释word2vec训练过程,觉得写的不错,转过来了 原文链接 http://nbviewer.jupyter.org/github/dolaameng/tutorial ...
- Solr4.7从文件创建索引
索引数据源并不会一定来自于数据库.XML.JSON.CSV这类结构化数据,很多时候也来自于PDF.word.html.word.MP3等这类非结构化数据,从这类非结构化数据创建索引,solr也给我们提 ...
- Test class should have exactly one public zero-argument constructor
java.lang.Exception: Test class should have exactly one public zero-argument constructor at org.juni ...