kuangbin_SegTree I (HDU 1540)
做完D之后我信誓旦旦以为之后就只剩一个二维就能攻克线段树了 看来也跟图论一样全是模板嘛
然后我打开了I题一眼看下去似乎直接用线段树记录sum然后跟区间长度比较然后处理一下实现也不难
两个小时后:特么的好像没那么简单啊
然后我百度了才知道原来这又是一个新题型...区间合并...啊啊啊啊啊
感谢kuangbin巨巨的blog让我学会了这个方法...
另外我WA了一天 然后上机课时候打开来重新看的时候一眼瞟到build的时候l 跟 r写反了 心痛
再多说一句 这题hdu一如既往的坑 明明有好多组数据 input上非说只有一组
#include <cstdio>
#include <cmath>
#include <cstring>
#include <stack>
#include <algorithm>
#define INF 0x3f3f3f3f
#define mem(str,x) memset(str,(x),sizeof(str))
#define STOP puts("Pause");
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
using namespace std;
typedef long long LL; const int MAXN = ;
int n, m, ll[MAXN<<], rl[MAXN<<], ml[MAXN<<]; void build(int l, int r, int rt)
{
ll[rt] = rl[rt] = ml[rt] = r - l + ;
if(l == r) return;
int m = (l + r) >> ;
build(lson);
build(rson);
} void update(int p, int c, int l, int r, int rt)
{
if(l == r){
ll[rt] = rl[rt] = ml[rt] = c;
return;
}
int m = (l + r) >> ;
if(p <= m) update(p, c, lson);
else update(p, c, rson);
if((ll[rt] = ll[rt<<]) == m - l + ) ll[rt] += ll[rt<<|];
if((rl[rt] = rl[rt<<|]) == r - m) rl[rt] += rl[rt<<];
ml[rt] = max(max(ml[rt<<], ml[rt<<|]), rl[rt<<] + ll[rt<<|]);
} int query(int p, int l, int r, int rt)
{
if(l == r || ml[rt] == r - l + || ml[rt] == ) return ml[rt];
int m = (l + r) >> ;
if(p <= m){
if(p > m - rl[rt<<]){
return query(p, lson) + query(m + , rson);
}
else return query(p, lson);
}
else{
if(p < m + + ll[rt<<|]){
return query(m, lson) + query(p, rson);
}
else return query(p, rson);
}
} int main()
{
int ask;
char order[];
stack<int> s;
while(~scanf("%d%d", &n, &m)){
while(!s.empty()) s.pop();
build(, n, );
while(m--){
scanf("%s", order);
if(order[] == 'D'){
scanf("%d", &ask);
s.push(ask);
update(s.top(), , , n, );
}
else if(order[] == 'R'){
if(!s.empty()){
update(s.top(), , , n, );
s.pop();
}
}
else{
scanf("%d", &ask);
printf("%d\n", query(ask, , n, ));
}
}
}
return ;
}
kuangbin_SegTree I (HDU 1540)的更多相关文章
- HDU 1540 / POJ 2892 Tunnel Warfare (单点更新,区间合并,求包含某点的最大连续个数)
题意:一条线上有n个点,D x是破坏这个点,Q x是表示查询x所在的最长的连续的点的个数,R是恢复上一次破坏的点. 思路:这题的关键是查询. 将被毁的村庄看成空位,当查询某个点的时候,如果我们知道它左 ...
- HDU 1540 Tunnel Warfare(最长连续区间 基础)
校赛,还有什么途径可以申请加入ACM校队? Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/ ...
- HDU 1540 Tunnel Warfare
HDU 1540 思路1: 树状数组+二分 代码: #include<bits/stdc++.h> using namespace std; #define ll long long #d ...
- hdu 1540/POJ 2892 Tunnel Warfare 【线段树区间合并】
Tunnel Warfare Time Limit: 4000/2000 MS ...
- Tunnel Warfare HDU 1540 区间合并+最大最小值
Tunnel Warfare HDU 1540 区间合并+最大最小值 题意 D x是破坏这个点,Q x是表示查询以x所在的最长的连续的点的个数,R是恢复上一次破坏的点. 题解思路 参考的大佬博客 这里 ...
- E - Tunnel Warfare HDU - 1540 F - Hotel G - 约会安排 HDU - 4553 区间合并
E - Tunnel Warfare HDU - 1540 对这个题目的思考:首先我们已经意识到这个是一个线段树,要利用线段树来解决问题,但是怎么解决呢,这个摧毁和重建的操作都很简单,但是这个查询怎么 ...
- HDU 1540 Tunnel Warfare(线段树+区间合并)
http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目大意:抗日战争期间进行地道战,存在n个村庄用地道连接,输入D表示破坏某个村庄(摧毁与其相连的地道, 包 ...
- hdu 1540 Tunnel Warfare (区间线段树(模板))
http://acm.hdu.edu.cn/showproblem.php?pid=1540 Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 1540 Tunnel Warfare(Treap)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 思路:三种操作: D摧毁一个点 R重建最晚被修改的那个点 Q询问点x联通的点有多少个 逆向思维,D操 ...
随机推荐
- Android sdk环境配置
1.环境搭建 1.1.JDK安装 1.2.Eclipse安装 1.3.Android SDK安装 1.4.ADT安装 1.5.创建AVD 详细细节 http://www.cnblogs.com/s ...
- 堆糖瀑布流完整解决方案(jQuery)
2010年堆糖创办以来,网站界面经历过3-5次重大改版,logo也曾更换过两次,早期蓝红相间三个圈的logo恐怕很少有人记得了.与此同时,前端 js 框架也在默默的更新换代.最早堆糖上线时,js 采用 ...
- iOS推送生成服务器端p12文件
生成服务器端推送p12文件 所需文件:A.开发证书 aps_production.cer B.本地导出的私钥 : aps_production.p12 C.生成证书时用到的请求文件:Push.c ...
- Sprint 2(第一天)
Sprint 2计划会议: 目标: 1.实现用户模块的权限控制,能够进行用户登录的功能 2.对菜单模块实现增加菜单列表详情,修改菜单列表详情,删除菜单列表详情,查询菜单列表详情的功能 3.实现菜品分类 ...
- git pull错误
1. Pull is not possible because you have unmerged files. 症状:pull的时候 $ git pull Pull is not possible ...
- 一步一步搭框架(asp.netmvc+easyui+sqlserver)-01
一步一步搭框架(asp.netmvc+easyui+sqlserver)-01 要搭建的框架是企业级开发框架,适用用企业管理信息系统的开发,如:OA.HR等 1.框架名称:sampleFrame. 2 ...
- 2016 2 - 23 arc中的所有权修饰符(_strong修饰符与_weak修饰符)
一 _strong修饰符 1._strong修饰符是id类型和对象类型默认的所有权修饰符.如下: id obj = [[NSObject alloc] init];//在没用明确变量所有权修饰符时,会 ...
- xmlrpc实现bugzilla api调用(无会话保持功能,单一接口请求)
xmlrpc实现bugzilla4 xmlrpc api调用(无会话保持功能,单一接口请求),如需会话保持,请参考我的另外一篇随笔(bugzilla4的xmlrpc接口api调用实现分享: xml ...
- 写简单游戏,学编程语言-python篇
好吧, 首先得承认这个题目写的夸大了,人才菜鸟一枚,游戏相关编程也是知道点概念.但是本人对游戏开发比较感兴趣,相信大多数喜欢玩玩游戏,因为它给人确实带来很多乐趣,而编程语言的学习最少对于我来说比较乏味 ...
- Integer to Roman -- LeetCode 012
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...