做完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. Javascript DOM编程艺术 语法部分

    1.变量,可以变化的东西我们称为变量,随着年龄的增大,我们的age不断变大 2.Javascript变量声明用var,可以不声明变量类型.尽量声明为一个字符串字面量. 3.弱类型:要求程序员必须明确的 ...

  2. ANDROID : java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String in android

    Andriod系统包中现在已经自带加密函数,如果用apache的codec包则会报以上错误,用android.util.Base64以下方法代替org.apache.commons.codec.bin ...

  3. 利用python实现爬虫爬取某招聘网站,北京地区岗位名称包含某关键字的所有岗位平均月薪

    #通过输入的关键字,爬取北京地区某岗位的平均月薪 # -*- coding: utf-8 -*- import re import requests import time import lxml.h ...

  4. 今天遇到的点击添加按钮button_click代码段无法执行的问题

    首先:本人小白一枚,刚入行,如有表述不当的地方,还请多多指教 网页界面如图: 当点击添加按钮后断点测试进入后台代码运行: 代码会先执行Page_Load页面,当加载完后Page_Load代码会跳转到m ...

  5. ASP.NET Repeater 控件分页

    protected void Page_Load(object sender, EventArgs e) { HttpContext context = HttpContext.Current; co ...

  6. android接入微信分享(朋友、朋友圈)、QQ分享(好友、空间)

    1.申请注册你的appid 2.下载sdk QQ: http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD 微信:https://open. ...

  7. github提交代码流程:

    (1)  检查一遍代码改动          $git status (2) 将工作目录中的代码提交到暂存区 $ git add filename     git add -A (3)  提交代码到本 ...

  8. software_testing_work2_question1(改)_edition

    由于上个版本问题多多,而且测试情况略有呵呵,于是想想还是默默的改进了一个版本. input类 首先呢,是作为输入项的实体类input. 对比之前的版本,新版本(姑且称其为edition2)加强了ope ...

  9. 如何理解meta标签

    相信大家对meta标签都不陌生,但是打开某些网页源代码看到一堆的meta难免一脸蒙逼.废话少说,请大家更随我一起探索meta标签都有哪些属性以及作用. W3C给meta标签的定义是:<meta& ...

  10. Intent和IntentFilter详解

    Intent用于启动Activity,Service, 以及BroadcastReceiver三种组件, 同时还是组件之间通信的重要媒介. 使用Intent启动组件的优势1, Intent为组件的启动 ...