hdu 1540 Tunnel Warfare 线段树 区间合并
题意:
三个操作符
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 线段树 区间合并的更多相关文章
- HDU 1540 Tunnel Warfare 线段树区间合并
Tunnel Warfare 题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少 思路:一个节点的最大连续区间由(左儿子的最大的连续区间,右儿子的最大连续区 ...
- hdu 1540 Tunnel Warfare(线段树区间统计)
Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- hdu 1540 Tunnel Warfare 线段树 单点更新,查询区间长度,区间合并
Tunnel Warfare Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- Tunnel Warfare 线段树 区间合并|最大最小值
B - Tunnel WarfareHDU - 1540 这个有两种方法,一个是区间和并,这个我个人感觉异常恶心 第二种方法就是找最大最小值 kuangbin——线段树专题 H - Tunnel Wa ...
- HDU 1540 Tunnel Warfare (线段树)
Tunnel Warfare Problem Description During the War of Resistance Against Japan, tunnel warfare was ca ...
- HDU 1540 Tunnel Warfare (线段树)
题目大意: n 个村庄排列在一条直线上,相邻的村庄有地道连接,除首尾两个村庄外,其余村庄都有两个相邻的村庄.其中有 3 中操作 D x :表示摧毁编号为 x 的村庄,Q x:表示求出包含村庄 x 的最 ...
- HDU 1540 Tunnel Warfare (线段树或set水过)
题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少. 析:首先可以用set水过,set用来记录每个被破坏的村庄,然后查找时,只要查找左右两个端点好. 用线段 ...
- HDU1540 Tunnel Warfare —— 线段树 区间合并
题目链接:https://vjudge.net/problem/HDU-1540 uring the War of Resistance Against Japan, tunnel warfare w ...
- HDU 6638 - Snowy Smile 线段树区间合并+暴力枚举
HDU 6638 - Snowy Smile 题意 给你\(n\)个点的坐标\((x,\ y)\)和对应的权值\(w\),让你找到一个矩形,使这个矩阵里面点的权值总和最大. 思路 先离散化纵坐标\(y ...
随机推荐
- 强哥HTML学习笔记
html 浏览器的选择:1.火狐2.ie3.chrome4.mac5.opera 安装两款插件:1.firebug2.web develope html页面元素:1.doctype2.htmlhead ...
- Redis I/O 多路复用技术原理
引言 Redis 是一个单线程却性能非常好的内存数据库, 主要用来作为缓存系统. Redis 采用网络 I/O 多路复用技术来保证在多个连接时,系统的高吞吐量(TPS). 系统吞吐量(TPS)指的是系 ...
- SpringMVC Web 相对路径与绝对路径
基本概念 绝对路径 绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径) 例如: C:\xyz\test.txt 代表了 test.txt 文件的绝对路径. http://www ...
- Linux系统函数read()/write()/pread()/pwrite()的区别-(转自CSDN网络)
在Linux和UNIX中有很多的输入输出函数,有时真是让想跟它攀点关系的菜鸟们束手无策.先来看看都有哪些函数,通过解析与总结,看看能不能让大家能这些函数有个理性的认识,哦,原来是这么回事,也就算我没白 ...
- STM32关于多线程运行的疑问
我有一个疑问,如果 STM32在操作系统环境下 能够一个线程串口中断接收数据 另一个线程 继续进行其他的操作
- [leetcode] (周赛)869. 重新排序得到 2 的幂
869. 重新排序得到 2 的幂 枚举排列,然后验证.比较暴力. 其实好一点的做法应该反过来,先把int范围下的2的N幂算出来,然后一个一个验证给出的数能不能拼成. class Solution { ...
- Relay外部库使用
Relay外部库使用 本文介绍如何将cuDNN或cuBLAS等外部库与Relay一起使用. Relay内部使用TVM生成目标特定的代码.例如,使用cuda后端,TVM为用户提供的网络中的所有层生成cu ...
- NVIDIA Turing Architecture架构设计(下)
NVIDIA Turing Architecture架构设计(下) GDDR6 内存子系统 随着显示分辨率不断提高,着色器功能和渲染技术变得更加复杂,内存带宽和大小在 GPU 性能中扮演着更大的角色. ...
- BeetleX之Vue ElementUI生成工具
BeetleX.WebFamily在新版本的功能中引入了一个全新的功能,通过这一功能可以大大节省UI的开发工作量.组件集成了一个图形化的UI编辑器,可以连接数据库对数据表或查询快速度生成编辑和数据查询 ...
- B-Tree插入和删除的Java实现
B-Tree插入和删除的Java实现 一.一颗非空m阶B-Tree的性质 除根结点以外的每个结点的孩子引用最多存在m个,关键码最多存在m - 1个:除根结点以外的每个结点的孩子引用至少存在⌈m / 2 ...