题意:

三个操作符

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. Ubuntu相关系统配置问题

    1.Ubuntu 16.04下安装VMware Tools 由于下载的是ubuntu-16.04.3-desktop-amd64,需要安装vmware tools,原来提取提取文件再解压的方式比较麻烦 ...

  2. linux服务之NTP及chrony时间同步

    博客园 首页 联系 管理   linux服务之NTP及chrony时间同步   一.NTP时间同步 NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步 ...

  3. 怎么样在同一个word文件中删除不同节数的页眉

    1.双击页眉,进入页眉编辑状态2.选择准备删除页眉的节,直接额删除即可.注意:为不至于因该节的改动影响其他节的页眉,需要在页眉设置上,每节都要取消链接到前一节页眉 把那张的前面和后面都插入分隔符,在页 ...

  4. stm32 向W25Q256FLASH中通过 FATFS文件系统写入数据 写多了之后出现错误,之前存储的全都找不到了

    stm32 像W25Q256FLASH中通过  FATFS文件系统写入数据  写多了之后出现错误,之前存储的全都找不到了 http://firebbs.cn/thread-23490-1-1.html ...

  5. IT菜鸟之交换机基础配置

    交换机属于二层设备(隶属于osi七层模型中的第二层:数据链路层,不识别不支持IP地址)  > 用户模式 用于登录设备 # 特权模式 用于查询设备配置 (config)# 全局模式 用于配置设备 ...

  6. IDEA Git 操作常见错误处理

    使用 IDEA 的 git 进行操作时报错 更新报错 Git Pull Failed: refusing to merge unrelated histories 提交报错 Push rejected ...

  7. MyBatis 开启 Log4j 日志调试信息开关

    Log4j 是什么 Log4j 是由 Apache 提供的开源日志框架,用于帮助用户处理日志信息. Log4j 能将日志信息分级打印和存储,而且提供了日志不同的存储方式,我们可以将日志发送到控制台,或 ...

  8. 用virtualenv建立Python独立开发环境

    1.用pip安装virtualenv sudo apt-get install python-virtualenv 2.1 创建python2的虚拟环境,进入要创建虚拟环境的目录下,我是放在/home ...

  9. 西门子 S7300 以太网模块连接组态王方法

    北京华科远创科技有限研发的远创智控ETH-YC模块,以太网通讯模块型号有MPI-ETH-YC01和PPI-ETH-YC01,适用于西门子S7-200/S7-300/S7-400.SMART S7-20 ...

  10. 编译器设计-RunTime运行时环境

    编译器设计-RunTime运行时环境 Compiler Design - Run-Time Environment 作为源代码的程序仅仅是文本(代码.语句等)的集合,要使其活动,它需要在目标计算机上执 ...