做完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)的更多相关文章

  1. HDU 1540 / POJ 2892 Tunnel Warfare (单点更新,区间合并,求包含某点的最大连续个数)

    题意:一条线上有n个点,D x是破坏这个点,Q x是表示查询x所在的最长的连续的点的个数,R是恢复上一次破坏的点. 思路:这题的关键是查询. 将被毁的村庄看成空位,当查询某个点的时候,如果我们知道它左 ...

  2. HDU 1540 Tunnel Warfare(最长连续区间 基础)

    校赛,还有什么途径可以申请加入ACM校队?  Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/ ...

  3. HDU 1540 Tunnel Warfare

    HDU 1540 思路1: 树状数组+二分 代码: #include<bits/stdc++.h> using namespace std; #define ll long long #d ...

  4. hdu 1540/POJ 2892 Tunnel Warfare 【线段树区间合并】

    Tunnel Warfare                                                             Time Limit: 4000/2000 MS ...

  5. Tunnel Warfare HDU 1540 区间合并+最大最小值

    Tunnel Warfare HDU 1540 区间合并+最大最小值 题意 D x是破坏这个点,Q x是表示查询以x所在的最长的连续的点的个数,R是恢复上一次破坏的点. 题解思路 参考的大佬博客 这里 ...

  6. E - Tunnel Warfare HDU - 1540 F - Hotel G - 约会安排 HDU - 4553 区间合并

    E - Tunnel Warfare HDU - 1540 对这个题目的思考:首先我们已经意识到这个是一个线段树,要利用线段树来解决问题,但是怎么解决呢,这个摧毁和重建的操作都很简单,但是这个查询怎么 ...

  7. HDU 1540 Tunnel Warfare(线段树+区间合并)

    http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目大意:抗日战争期间进行地道战,存在n个村庄用地道连接,输入D表示破坏某个村庄(摧毁与其相连的地道, 包 ...

  8. hdu 1540 Tunnel Warfare (区间线段树(模板))

    http://acm.hdu.edu.cn/showproblem.php?pid=1540 Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) ...

  9. hdu 1540 Tunnel Warfare(Treap)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 思路:三种操作: D摧毁一个点 R重建最晚被修改的那个点 Q询问点x联通的点有多少个 逆向思维,D操 ...

随机推荐

  1. C# SQLite编程总结

    1.如果自己手动创建了数据库和字段,则不需要再创建table,基本流程: 1)SQLiteConnectionStringBuilder sb = new SQLiteConnectionString ...

  2. Nginx + uwsgi

    1. 安装uwsgi依赖yum groupinstall "Development Tools"yum install pythonyum install python-devel ...

  3. 通过FEDERATED存储引擎跨实例访问数据

    通过FEDERATED存储引擎同步两实例间的表数据需求情景:实例1中A库中的三个视图是实例2中的B库所依赖的,B需要A库中三个视图的实时数据.方案:通过FEDERATED来完成跨势力的查询FEDERA ...

  4. ionic 使用

    1. 编译时目录下不能有中文文件的名称,否则会报一个资源错误 ,返回aapt.exe'' finished with non-zero exit value 1. 2. 编译完成后在手机上无法访问网络 ...

  5. jsp九大内置对象和四大作用域

    看到网上一些Jsp内置对象介绍的都不是很全,今天我把各位大神的整理了一下. JSP九大对象:内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用. 一.reque ...

  6. linux内核分析——扒开系统调用的三层皮(下)

    20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 实验 ...

  7. iOS的触摸事件的用法以及和手势识别器的区别

    1.首先来介绍下触摸事件和手势识别器的利与弊 触摸事件和手势识别器二者之间有直接的关系 手势识别器是在触摸事件的基础上演变过来的 当我们用到触摸事件时 默认的uiview是没有什么效果的 只能自定义v ...

  8. No.1 CAS 之LDAP认证服务端集群配置

    建档日期:   2016/08/31 最后修改日期:   2016/12/09   1 概述 本文描述了CAS单点登录服务端配置的大概流程,希望抛砖引玉,帮助你完成CAS服务端的配置. 本文采用apa ...

  9. PHP时区配置

    在PHP安装目录中找到 php.ini-development 复制创建新的副本 找到 :date.timezone = 修改为 date.timezone = PRC 并保存为php.ini PRC ...

  10. MeshDog

    一.TransforMesh 1. CGAL (http://www.cgal.org/download/windows.html#GeneralPrerequisites) 预装软件 1.1 cma ...