题意:

三个操作符

D x:摧毁第x个隧道

R x:修复上一个被摧毁的隧道,将摧毁的隧道入栈,修复就出栈

Q x:查询x所在的最长未摧毁隧道的区间长度。

  1.如果当前区间全是未摧毁隧道,返回长度

  2.如果在坐儿子的右区间或右儿子的左区间,返回这两个区间长度和

  3.继续递归

#include <bits/stdc++.h>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
using namespace std; const int MAXN = 55555;
int mx[MAXN<<2], lmx[MAXN<<2], rmx[MAXN<<2];
int des[MAXN]; void push_up(int rt, int len)
{
lmx[rt] = lmx[rt<<1];
rmx[rt] = rmx[rt<<1|1];
if(lmx[rt] == len - (len >> 1)) lmx[rt] += lmx[rt<<1|1];
if(rmx[rt] == len >> 1) rmx[rt] += rmx[rt<<1];
mx[rt] = max(rmx[rt<<1] + lmx[rt<<1|1], max(mx[rt<<1], mx[rt<<1|1]));
} void build(int l, int r, int rt)
{
mx[rt] = lmx[rt] = rmx[rt] = r - l + 1;
if(l == r) return;
int m = (l + r) >> 1;
build(lson);
build(rson);
} void update(int p, int c, int l, int r, int rt)
{
if(l == r)
{
mx[rt] = c;
lmx[rt] = c;
rmx[rt] = c;
return;
}
int m = (l + r) >> 1;
if(p <= m) update(p, c, lson);
else update(p, c, rson);
push_up(rt, r-l+1);
} int query(int p, int l, int r, int rt)
{
if(mx[rt] == 0) return 0;
if(mx[rt] == r - l + 1) return r - l + 1;
int m = (l + r) >> 1;
if(p > m - rmx[rt<<1] && p <= m + lmx[rt<<1|1])
return rmx[rt<<1] + lmx[rt<<1|1];
if(p <= m) return query(p, lson);
return query(p, rson);
} int main()
{
// freopen("in.txt", "r", stdin);
int n, m;
while(~scanf("%d%d", &n, &m))
{
build(1, n, 1);
int cnt = 0;
while(m--)
{
int x;
char op[3];
scanf("%s", op);
if(op[0] == 'D')
{
scanf("%d\n", &x);
des[cnt++] = x;
update(x, 0, 1, n, 1);
}
else if(op[0] == 'R')
{
if(cnt == 0) continue;
update(des[--cnt], 1, 1, n, 1);
}
else
{
scanf("%d", &x);
printf("%d\n", query(x, 1, n, 1));
}
}
}
return 0;
}

hdu 1540 Tunnel Warfare 线段树 区间合并的更多相关文章

  1. HDU 1540 Tunnel Warfare 线段树区间合并

    Tunnel Warfare 题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少 思路:一个节点的最大连续区间由(左儿子的最大的连续区间,右儿子的最大连续区 ...

  2. hdu 1540 Tunnel Warfare(线段树区间统计)

    Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  3. hdu 1540 Tunnel Warfare 线段树 单点更新,查询区间长度,区间合并

    Tunnel Warfare Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...

  4. Tunnel Warfare 线段树 区间合并|最大最小值

    B - Tunnel WarfareHDU - 1540 这个有两种方法,一个是区间和并,这个我个人感觉异常恶心 第二种方法就是找最大最小值 kuangbin——线段树专题 H - Tunnel Wa ...

  5. HDU 1540 Tunnel Warfare (线段树)

    Tunnel Warfare Problem Description During the War of Resistance Against Japan, tunnel warfare was ca ...

  6. HDU 1540 Tunnel Warfare (线段树)

    题目大意: n 个村庄排列在一条直线上,相邻的村庄有地道连接,除首尾两个村庄外,其余村庄都有两个相邻的村庄.其中有 3 中操作 D x :表示摧毁编号为 x 的村庄,Q x:表示求出包含村庄 x 的最 ...

  7. HDU 1540 Tunnel Warfare (线段树或set水过)

    题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少. 析:首先可以用set水过,set用来记录每个被破坏的村庄,然后查找时,只要查找左右两个端点好. 用线段 ...

  8. HDU1540 Tunnel Warfare —— 线段树 区间合并

    题目链接:https://vjudge.net/problem/HDU-1540 uring the War of Resistance Against Japan, tunnel warfare w ...

  9. HDU 6638 - Snowy Smile 线段树区间合并+暴力枚举

    HDU 6638 - Snowy Smile 题意 给你\(n\)个点的坐标\((x,\ y)\)和对应的权值\(w\),让你找到一个矩形,使这个矩阵里面点的权值总和最大. 思路 先离散化纵坐标\(y ...

随机推荐

  1. 《SystemVerilog验证-测试平台编写指南》学习 - 第3章 过程语句和子程序

    <SystemVerilog验证-测试平台编写指南>学习 - 第3章 过程语句和子程序 3.1 过程语句 3.2 任务.函数以及void函数 3.3 任务和函数概述 3.4 子程序参数 3 ...

  2. Centos6下通过 oprofile分析CPU性能

    Centos6下通过 oprofile分析CPU性能 2014-01-18 10:55:15 bobpen 阅读数 2218更多 分类专栏: linux   版权声明:本文为博主原创文章,遵循CC 4 ...

  3. mysql如何设置一个字段,里面是自增的序号(1,2,3,..........)。

    [遇到问题] [可忽略] 想把以前写的留言板搬到我的网站上去,所以要在Mysql上创建一个一mu一样的数据库,表单,字段..................... userid这个字段忘记了如何添加, ...

  4. 060.Python组件-中间件

    一 中间件基本介绍 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会 ...

  5. Centos 7 进入单用户模式更改root密码方法

    进入单用户模式的方法 方法一: 1.开机进入grub菜单的时候上下选择,按e编辑. 到linux16所在行的最后面. ro 只读文件系统 biosdevname=0 戴尔的服务器需要设置 net.if ...

  6. 11.15 dmidecode:查询系统硬件信息

    dmidecode命令可以用来在Linux系统下获取硬件方面的信息.dmidecode遵循SMBIOS/DMI标准,其输出的信息包括BIOS.处理器.内存.缓存等. dmidecode命令的参数选项及 ...

  7. Ubuntu1804下k8s-CoreDNS占CPU高问题排查

    1.背景: 最近在ubuntu804上适配k8s的时候,部署到业务pod的时候,出现了服务器卡死,top查看发现负载很高,进行CPU排序发现如下信息,可知是CoreDNS服务导致. 2. 分析排查: ...

  8. pytest + allure

    参考allure官网: https://docs.qameta.io/allure/#_pytest 1.使用命令pip install pytest-allure安装 注意:我遇到的一个现象,用命令 ...

  9. Python+Selenium学习笔记16 - unittest单元测试框架

    unittest单元测试框架包括 Test Case,  Test Suite, Test Runner, Test Fixture Test Cases 组成Test Suite, Test Run ...

  10. Paddle概述

    Paddle概述 本文结合深度学习理论与实践,使用百度飞桨平台实现自然语言处理.计算机视觉及个性化推荐等领域的经典应用. 实践部分使用飞桨深度学习开源框架,适配最新的2.0版本,默认使用动态图编程范式 ...