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 ...
随机推荐
- filter, sort
def is_odd(n): return n % 2 == 1 t = list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 0])) print(t) # ...
- win7如何快速设置开机启动项?
添加开机启动项方法: 找到windows开始菜单->所有程序->启动,右键打开, 进入C:\Users\Ocean\AppData\Roaming\Microsoft\Windows\St ...
- _int64、long long 的区别
C++的64位整数[原]by 赤兔 http://baike.baidu.com/view/1235293.htm 在做ACM题时,经常都会遇到一些比较大的整数.而常用的内置整数类型常常显得太小了:其 ...
- js的初始化
在项目中遇到了类似于这样的js, myinit.js文件: var wyl_01 = { tip : function(msg){ alert('i am a tip,msg:'+msg); }, t ...
- 网站压力测试工具之WebBench
1 Web Bench简介 WebBench是有名的网站压力测试工具,由Lionbridge公司开发,最多可以模拟3万个并发连接去测试网站的负载能力. Webbech能测试处在相同硬件上,不同服务的性 ...
- 第二节 EAN 8 码 / EAN 13 码
EAN码的全名为欧洲商品条码(European Article Number),源於西元1977年,由欧洲十二个工业国家所共同发展出来的一种条码.目前已成为一种国际性的条码系统.EAN条码系统的管理是 ...
- KbmMW资源汇总(更新中…)
KbmMW框架是收费的,不在此提供下载,如需购买,请自行联系作者Kim Madsen. 网址资源: 官网主页:http://www.components4programmers.com/product ...
- STL insert()使用
下面我以vector的insert()为例: c++ 98: single element (1) iterator insert (iterator position, const value_ty ...
- IT第五天 - 循环的使用、本周总结 ★★★
IT第五天 上午 循环 1.while循环.do-while循环.switch语句块的使用 下午 编程 1.编程注释的编写 2.编程力求代码的精简,算法的优化 3.变量的优化使用 小项目 1.swit ...
- 一、cocos2dx之如何优化内存使用(高级篇)
本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=93 一.内存优化原则 为了优化应用内存,你应该知道是什么消耗了你应用的大部分内存,答案就是Textu ...