HDU -1166 线段树
#include <algorithm>
#include <iostream>
#include<sstream>
#include<cstring>
#include<string>
#include<cstdio>
#include<cctype>
#include<vector>
#include<deque>
#include<map>
#include<set> #define M 50000
#define inf 0x3f3f3f3f
typedef long long ll; using namespace std; struct Data
{
int left, right, sum, lazy;
}tree[M*];
int n;
int sum, lazy;
int x, y;
string str; void built(int l,int r,int k) {
tree[k].left = l, tree[k].right = r;
if (l == r) {
scanf("%d", &tree[k].sum);
return;
}
int mid = (l + r) / ;
built(l, mid,k*);
built(mid + , r, k * + );
tree[k].sum = tree[k * ].sum + tree[k * + ].sum;
} void down(int k) {
lazy = tree[k].lazy;
tree[k].lazy = ;
tree[k * ].lazy += lazy;
tree[k * + ].lazy += lazy;
tree[k * ].sum += (tree[k * ].right - tree[k * ].left + ) * lazy;
tree[k * + ].sum += (tree[k * + ].right - tree[k * + ].left + ) * lazy;
} void search(int k) {
if (tree[k].left >=x && tree[k].right <=y) {
sum += tree[k].sum;
return;
}
if (tree[k].lazy)down(k);
int mid = (tree[k].left + tree[k].right) / ;
if (x <= mid)search(k * );
if (y > mid)search(k * + );
} void change_inv(int k) {
if (tree[k].left == tree[k].right) {
//tree[k].lazy += add;
tree[k].sum += y;
return;
}
if (tree[k].lazy)down(k);
int mid = (tree[k].left + tree[k].right) / ;
if (x <= mid)change_inv(k * );
else change_inv(k * + );
tree[k].sum = tree[k * ].sum + tree[k * + ].sum;
} int main() {
int T;
cin >> T;
for (int Case = ; Case <= T; Case++) {
scanf("%d", &n);
built(, n, );
printf("Case %d:\n", Case);
while (true){
cin >> str;
if (str == "End")break;
scanf("%d%d", &x, &y);
if (str == "Add") {
change_inv();
}
else if (str == "Sub") {
y *= -;
change_inv();
}
else if (str == "Query") {
sum = ;
search();
printf("%d\n", sum);
}
}
}
return ;
}
HDU -1166 线段树的更多相关文章
- hdu 1166 线段树(sum+单点修改)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 敌兵布阵 HDU 1166 线段树
敌兵布阵 HDU 1166 线段树 题意 这个题是用中文来描写的,很简单,没什么弯. 解题思路 这个题肯定就是用线段树来做了,不过当时想了一下可不可用差分来做,因为不熟练就还是用了线段树来做,几乎就是 ...
- HDU(1166),线段树模板,单点更新,区间总和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 第一次做线段树,帆哥的一句话,我记下来了,其实,线段树就是一种处理数据查询和更新的手段. 然后, ...
- hdu 1166 线段树单点更新
等线段树复习完再做个总结 1101 2 3 4 5 6 7 8 9 10Query 1 3Add 3 6Query 2 7Sub 10 2Add 6 3Query 3 10End Case 1:633 ...
- A - 敌兵布阵 HDU - 1166 线段树(多点修改当单点修改)
线段树板子题练手用 #include<cstdio> using namespace std; ; int a[maxn],n; struct Node{ int l,r; long lo ...
- hdu 1166 线段树(单点增减 区间求和)
Sample Input1101 2 3 4 5 6 7 8 9 10Query 1 3Add 3 6Query 2 7Sub 10 2Add 6 3Query 3 10End Sample Outp ...
- hdu 1166线段树 单点更新 区间求和
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 1166 线段树模板&树状数组模板
HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using nam ...
- hdu 1166 线段树 奇兵布阵
#include<iostream> using namespace std; ; )*];//n个叶子就有2*n-4*n个节点 ]; int n; void getup(int root ...
- hdu 1166 线段树 区间求和 +单点更新 CD模板
题目链接 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
随机推荐
- mac安装和启动mongodb
使用使用 brew安装mongodb 可以使用 OSX 的 brew 来安装 mongodb: sudo brew install mongodb 如果要安装支持 TLS/SSL 命令如下: sudo ...
- location - 修改url后 - 重新加载
window.location.href = window.location.pathname + search;
- Egret Engine 2D - Get Started
Get Started Egret 也支持在命令行完成编译,运行,发布等操作.在下面的教程中会穿插对应操作的命令行代码. 可新建游戏项目,也可建eui项目 这里包含默认的几个库,egr ...
- prometheus配置简介
参考网页:https://my.oschina.net/wangyunlong/blog/3060776 global: scrape_interval: 15s evalua ...
- LICEcap--一款录屏生成Gif的软件
下载地址:http://www.cockos.com/licecap/ 效果图:
- 详解contextConfigLocation|Spring启动过程详解(转)
原文链接:https://blog.csdn.net/qw222pzx/article/details/78191670 spring的应用初始化流程一直没有搞明白,刚刚又碰到了相关的问题.决定得好好 ...
- 汉诺塔(思维、DP思想)
链接:https://ac.nowcoder.com/acm/contest/3007/C来源:牛客网 题目描述 现在你有 N 块矩形木板,第 i 块木板的尺寸是 Xi*Yi,你想用这些木板来玩汉诺塔 ...
- 高质量Contrast Essay写作的结构分享
很多留学生对于Contrast Essay写作不是很了解,拿不到高分也是常有的事,那么大家要如何彻底掌握Contrast Essay写作呢?今天小编就给同学们分享Contrast Essay写作的结构 ...
- python2和python3共存
有很多朋友有这样的烦恼,自己的电脑里装了python2和python3,但是有些时候可能出现只能用python2或python3的情况,这个时候就蒙圈了,不知所措啊,我也是经过了这样的无奈,最后终于找 ...
- 在Linux下 MySQL错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 解决办法【很管用】
一般这个错误是由密码错误引起,解决的办法自然就是重置密码. 假设我们使用的是root账户. 1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下: #vim /etc/my.cnf(注:wi ...