hdu 1540 Tunnel Warfare (区间线段树(模板))
http://acm.hdu.edu.cn/showproblem.php?pid=1540
Tunnel Warfare
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3168 Accepted Submission(s): 1216
Frequently the invaders launched attack on some of the villages and destroyed the parts of tunnels in them. The Eighth Route Army commanders requested the latest connection state of the tunnels and villages. If some villages are severely isolated, restoration of connection must be done immediately!
There are three different events described in different format shown below:
D x: The x-th village was destroyed.
Q x: The Army commands requested the number of villages that x-th village was directly or indirectly connected with including itself.
R: The village destroyed last was rebuilt.
{
int l,r; //左右
int ll,ml,rl; //左边开始连续的最大长度、中间的最大长度、右边开始最大的连续长度(对没摧毁的村庄来说)
}node[N<<2];
{
if(node[p].l==node[p].r||node[p].ml==0||node[p].ml==node[p].r-node[p].l+1)
{
return node[p].ml;
}
int mid = (node[p].l+node[p].r)>>1;
if(id<=mid)
{
if(id>=node[lson].r-node[lson].rl+1) return query(id,lson)+query(mid+1,rson); //1
else query(id,lson);
}
else
{
if(id<=node[rson].l+node[rson].ll-1) return query(mid,lson)+query(id,rson); //2
else query(id,rson);
}
}

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<stack>
#define N 50005
#define lson p<<1
#define rson p<<1|1 using namespace std; struct Nod
{
int l,r; //左右
int ll,ml,rl; //左边开始连续的最大长度、中间的最大长度、右边开始最大的连续长度(对没摧毁的村庄来说)
}node[N<<]; void building(int l,int r,int p) //建树
{
node[p].l = l;
node[p].r = r;
node[p].ll=node[p].ml=node[p].rl=r-l+;
if(l==r) return;
int mid = (l+r)>>;
building(l,mid,lson);
building(mid+,r,rson);
} void update(int id,int p,int ok)
{
if(node[p].l==node[p].r)
{
if(ok==) node[p].ll=node[p].ml=node[p].rl=;
else node[p].ll=node[p].ml=node[p].rl=;
return ;
}
int mid = (node[p].l+node[p].r)>>;
if(id<=mid) update(id,lson,ok);
else update(id,rson,ok); node[p].ml = max(node[lson].ml,node[rson].ml);
node[p].ml = max(node[p].ml,node[lson].rl+node[rson].ll); //最大中间值是 左右孩子的中间值 与 左边右最大+右边左最大 三者的最大值 node[p].ll = node[lson].ll; //左孩子的左最大
node[p].rl = node[rson].rl; //右孩子的右最大 if(node[lson].ll==node[lson].r-node[lson].l+) node[p].ll+=node[rson].ll;
if(node[rson].rl==node[rson].r-node[rson].l+) node[p].rl+=node[lson].rl;
} int query(int id,int p)
{
if(node[p].l==node[p].r||node[p].ml==||node[p].ml==node[p].r-node[p].l+)
{
return node[p].ml;
}
int mid = (node[p].l+node[p].r)>>;
if(id<=mid)
{
if(id>=node[lson].r-node[lson].rl+) return query(id,lson)+query(mid+,rson); //
else query(id,lson);
}
else
{
if(id<=node[rson].l+node[rson].ll-) return query(mid,lson)+query(id,rson); //
else query(id,rson);
}
} int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
char op[];
int id;
stack<int> stk;
building(,n,);
while(m--)
{
scanf("%s",op);
if(op[]=='D')
{
scanf("%d",&id);
stk.push(id);
update(id,,);
}
else if(op[]=='Q')
{
scanf("%d",&id);
printf("%d\n",query(id,));
}
else if(op[]=='R')
{
id = stk.top();
stk.pop();
update(id,,);
}
}
while(!stk.empty()){stk.pop();}
}
return ;
}
hdu 1540 Tunnel Warfare (区间线段树(模板))的更多相关文章
- HDU 1540 Tunnel Warfare 平衡树 / 线段树:单点更新,区间合并
Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Lim ...
- HDU - 1540 Tunnel Warfare(线段树区间合并)
https://cn.vjudge.net/problem/HDU-1540 题意 D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少. 分析 线段树的区间内,我 ...
- hdu 1540 Tunnel Warfare (线段树 区间合并)
Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- hdu 1540 Tunnel Warfare(线段树)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1540 题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少. ...
- hdu 1540 Tunnel Warfare (线段树,维护当前最大连续区间)
Description During the War of Resistance Against Japan, tunnel warfare was carried out extensively i ...
- HDU 1540 Tunnel Warfare(线段树+区间合并)
http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目大意:抗日战争期间进行地道战,存在n个村庄用地道连接,输入D表示破坏某个村庄(摧毁与其相连的地道, 包 ...
- HDU 1540 Tunnel Warfare(最长连续区间 基础)
校赛,还有什么途径可以申请加入ACM校队? Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/ ...
- HDU--1540 Tunnel Warfare(线段树区间更新)
题目链接:1540 Tunnel Warfare 以为单组输入 这个题多组输入 结构体记录每个区间左边和右边的连续区间 ms记录最大 在查询操作时: 1.这个点即将查询到右区间 看这个点 x 是否存在 ...
- hdu 1540 Tunnel Warfare 线段树 单点更新,查询区间长度,区间合并
Tunnel Warfare Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
随机推荐
- PHP免费API调用,使用(CURL)
<?phpclass GetApiModel{//获取第三方API //获取身份证信息 //返回json /*{ "errNum": 0, "retMsg" ...
- Linux 的使用基础---Shell程序设计
Shell是Linux系统中的一个重要的层次,它是用户与系统交互作用的界面.Shell除了作为命令解释程序以外,还是一种高级程序设计语言.利用Shell程序设计语言可以编写出功能很强.但代码简单的程序 ...
- [转]十年前的老文:以 Linux 的名义
一.灰姑娘的狂欢 今年初,林纳斯·托瓦兹承认:“如果在12年前,有人告诉我Linux会发展到今天的模样,我肯定会惊得目瞪口呆.” 托瓦兹说的是实话.1991年,这名21岁的芬兰赫尔辛基大学的学生,偶然 ...
- 通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)
在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能 一.MSsqlserver中我们通常的用法 1.Sqlserver数据库测试 ---创建测试表 Create tab ...
- JavaScript学习笔记(7)——JavaScript语法之函数
函数就是包裹在花括号中的代码块,前面使用了关键词 function: function functionname() { //这里是要执行的代码 } 当调用该函数时,会执行函数内的代码. 可以在某事件 ...
- Redis多机集群
Redis集群.网上很多教程,只是按着它的步骤来做只能在单机上跑,而已不有点抗.也不用密码验证 开始: 1:redis集群最少需要要6个服务器端,因此先搞6台虚拟机 我用 centOS-7 mini ...
- jquery的effect-color对easyui没效果.自己冒险写个边框的颜色闪烁.
"jquery-ui-effect-color.js" 是从jqueryui下载的color动画部分(自己改了个名字). 链接 <!DOCTYPE html> < ...
- JS实现div块的拖放,调换位置
主要是HTML5 的拖放(Drag 和 Drop) 例子(不需要对div设置ID): <!DOCTYPE HTML> <html> <head> <scrip ...
- GZIP 头解析
在用HttpWebRequest对象时,一般我们都没有开启gzip压缩,如果服务端返回的数据比较大,这是我们需要开启gzip压缩,怎么开启呢? 1.给HttpWebRequest对象,添加如下Head ...
- parseInt()、parseFloat()与Number()的比较
我有一个同学最近在自学JavaScript,偶尔遇到问题了会让我帮忙解决,虽然我也是一个JavaScript菜鸟,但是我还是很乐意帮忙,这样不仅可以帮到别人,也可以让自己在解决问题的过程中学到更多知识 ...