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 ...
随机推荐
- Linux系统搭建负载均衡环境
1:负载均衡的定义多台服务器组成一个集群,向外提供相同的服务,所有的请求经过apache服务器的分配,到各台tomcat服务器处理请求.另外还需实现session共享,如果有一台tomcat服务器宕机 ...
- 项目中 mysql中的内容关于上架时间和下架时间
隐藏左边导航 在mysql中,是存放的10位的时间截,在后台添加时,时间的格式是:'Y-m-d H:i',没有秒的 字段 字段名称 字段类型 是否为空 默认值 备注 publish_up int(11 ...
- BFC引发的关于position的思考
BFC布局规则: 内部的Box会在垂直方向,一个接一个地放置. Box垂直方向的距离由margin决定.属于同一个BFC的两个相邻Box的margin会发生重叠 每个元素的margin box的左边, ...
- JAXB - Annotations, Controlling Element Selection: XmlAccessorType, XmlTransient
If JAXB binds a class to XML, then, by default, all public members will be bound, i.e., public gette ...
- 使用greenDao出现Property 'status' is not part of ********.NewCommentDao@717de9a
应为版本号的原因造成的,升级Schema版本号即可
- 重叠I/O之使用完成例程的扩展I/O【系列二】
一 废话 在上一篇文章中,我们介绍了通过等待内核对象来接受I/O完成通知的重叠I/O.除了使用同步对象外,我们还可以使用其它方法,这便是这篇文章要介绍的使用完成例程的扩展I/O.完成例程其实就是回调函 ...
- string[] 和 arraylist互转及问题解决
1,String 数组转成 list<String> String[] s={"1","2","3","5" ...
- IOS 应用程序启动加载过程(从点击图标到界面显示)
今天帮同事解决问题的时候发现,程序BUG是由加载过程引起的.所以当局部代码没有问题,但是程序一运行却总不是我们想要结果的时候,我们应该想想是不是因为我们忽略了试图加载过程的原因.下面我们用一个例子来简 ...
- asp.net 异步处理
#region 异步测试 //委托 public delegate void PrintDelegate(string s); [WebMethod] public string yibu() { / ...
- nodejs学习[持续更新]
1.退出node process.exit(0) 2.把API从上往下全部看一遍,先混个眼熟. 3. end