hdu 1166 敌兵布阵 【线段树】
好好学一下线段树----
从0开始----加油~
单点更新的
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
#define lp (p << 1)
#define rp (p << 1 | 1)
#define getmid(l,r) (l + (r - l) / 2) const int maxn = ;
struct node{
int l,r,s;
}t[*maxn]; int a[maxn],n; int calc(int a,int b) { return a+b; } void Push_up(int p){
t[p].s = calc(t[lp].s,t[rp].s);
} void Build_tree(int p,int l,int r){
t[p].l = l;
t[p].r = r;
if(l == r){ t[p].s = a[l];return;}
int mid = getmid(l,r);
Build_tree(lp,l,mid);
Build_tree(rp,mid+,r);
Push_up(p);
} void update(int p,int s,int w){//给s点加上w
if(t[p].l == t[p].r) {
t[p].s += w;
return;
}
int mid = getmid(t[p].l,t[p].r);
if(s <= mid) update(lp,s,w);
else update(rp,s,w);
Push_up(p);
} int sum(int p,int l,int r){
if(t[p].l == l && t[p].r == r) return t[p].s; int mid = getmid(t[p].l,t[p].r);
if(r <= mid) return sum(lp,l,r);
else if(mid < l) return sum(rp,l,r);
else return calc(sum(lp,l,mid),sum(rp,mid+,r));
} int main(){
int T;
scanf("%d",&T);
int kase = ;
while(T--){
scanf("%d",&n);
for(int i = ;i <= n;i++) scanf("%d",&a[i]);
Build_tree(,,n); // for(int i = 1;i <= n;i++)
// printf("t[%d].l = %d t[%d].r = %d t[%d].s = %d\n",i,t[i].l,i,t[i].r,i,t[i].s); char cmd[];
int x,y;
printf("Case %d:\n",++kase);
while(cin >> cmd){
if(cmd[] == 'E') break;
else if(cmd[] == 'A'){
scanf("%d %d",&x,&y);
update(,x,y);
}
else if(cmd[] == 'S'){
scanf("%d %d",&x,&y);
update(,x,-y);
}
else{
scanf("%d %d",&x,&y);
printf("%d\n",sum(,x,y));
}
}
}
return ;
}
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 ...
随机推荐
- img-responsive class图片响应式
在BootStrap中,给<img>添加 .img-responsive样式就可以实现图片响应式. 1 <img src="..." class="im ...
- noip 2010 引水入城 贪心 + 搜索
不难分析出如果有解则每个蓄水厂所能覆盖到的干旱城市一定是连续的.否则,中间那些没被覆盖的部分永远都不能被覆盖到. 当然,每个蓄水厂所覆盖的城市有可能不连续,不过既然有解,则一定都是连续的.我们可以开一 ...
- Python数据结构2-----队列和堆
一.线性结构:栈.队列.双端队列.列表 二.非线性结构:树.图.堆 [算法中看堆是非线性的,因为其相当于完全二叉树,但堆的存储元素是采用线性的顺序表数组来实现的] 三.队列: 1.队列类型:FIFO. ...
- Project Euler 16 Power digit sum( 大数乘法 )
题意: 215 = 32768,而32768的各位数字之和是 3 + 2 + 7 + 6 + 8 = 26. 21000的各位数字之和是多少? 思路:大数乘法,计算 210 × 100 可加速计算,每 ...
- 浅谈urllib和requests
urllib和requests的学习 urllib requests 参考资料 urllib urllib是python的基本库之一,内置四大模块,即request,error,parse,robot ...
- Jenkins学习总结(6)——了解DevOps的前世今生
DevOps是什么?从哪里来? DevOps的概念 DevOps一词的来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建. ...
- gem update --system
gem update --system 修改完gem sources之后,进行gem update: gem update --system 之后的输出: C:\Sites\test01>gem ...
- 零基础学python-7.7 字符串格式化方法(1)
承接上一章节.我们这一节来说说字符串格式化的还有一种方法.就是调用format() >>> template='{0},{1} and {2}' >>> templ ...
- POJ1274 The Perfect Stall 二分图,匈牙利算法
N头牛,M个畜栏,每头牛仅仅喜欢当中的某几个畜栏,可是一个畜栏仅仅能有一仅仅牛拥有,问最多能够有多少仅仅牛拥有畜栏. 典型的指派型问题,用二分图匹配来做,求最大二分图匹配能够用最大流算法,也能够用匈牙 ...
- LinkedList 方法知识点
package test_day_9; import java.util.Iterator; import java.util.LinkedList; public class LinkedListD ...