Tunnel Warfare

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6483    Accepted Submission(s): 2502

Problem Description
During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speaking, villages connected by tunnels lay in a line. Except the two at the ends, every village was directly connected with two neighboring ones.

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!

 
Input
The first line of the input contains two positive integers n and m (n, m ≤ 50,000) indicating the number of villages and events. Each of the next m lines describes an event.

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.

 
Output
Output the answer to each of the Army commanders’ request in order on a separate line.
 

Sample Input

7 9
D 3
D 6
D 5
Q 4
Q 5
R
Q 4
R
Q 4

Sample Output

1
0
2
4
/*
HDU 1540 Tunnel Warfare(最长连续区间 基础) 给你1-n连续的n个数字,然后执行以下三种操作
1.D x 删除第x个数字
2.R 恢复上一次删除的数字
3.Q x 查询包含x的最长连续区间 主要有ls,rs,ms分别表示当前节点 左端点开始的最长...,右端点...,整体最长连续区间
然后主要是在push_up和query上面了,要进行一些特殊判断来确定长度是否应该合并 hhh-2016-03-27 16:39:28
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <functional>
using namespace std;
#define lson (i<<1)
#define rson ((i<<1)|1)
typedef long long ll;
const int maxn = 50050;
struct node
{
int l,r;
int ls,rs,ms; //左端点,右端点,最大
int mid()
{
return (l+r)>>1;
}
} tree[maxn*5]; void push_up(int i)
{
tree[i].ls = tree[lson].ls;
tree[i].rs = tree[rson].rs; tree[i].ms = max(tree[lson].ms,tree[rson].ms);
tree[i].ms = max(tree[i].ms,tree[rson].ls+tree[lson].rs);
//i的ms肯定是lson,rson的ms.或者它们中间相连的长度
if(tree[i].ls == tree[lson].r-tree[lson].l+1)
//如果包含左儿子的全部,则与右儿子的ls相连
tree[i].ls += tree[rson].ls;
if(tree[i].rs == tree[rson].r-tree[rson].l+1)
tree[i].rs += tree[lson].rs;
} void build(int i,int l,int r)
{
tree[i].l = l,tree[i].r = r;
tree[i].ls=tree[i].rs=tree[i].ms=0;
if(l ==r )
{
tree[i].ls=tree[i].rs=tree[i].ms=1;
return ;
}
int mid=tree[i].mid();
build(lson,l,mid);
build(rson,mid+1,r);
push_up(i);
} void push_down(int i)
{ } void Insert(int i,int k,int val)
{
if(tree[i].l == tree[i].r)
{
if(val == 1)
tree[i].ls=tree[i].rs=tree[i].ms=1;
else
tree[i].ls=tree[i].rs=tree[i].ms=0;
return ;
}
push_down(i);
int mid = tree[i].mid();
if(k <= mid)
Insert(lson,k,val);
else
Insert(rson,k,val);
push_up(i);
} int query(int i,int k)
{
if(tree[i].l==tree[i].r || tree[i].ms==0 || tree[i].ms==(tree[i].r-tree[i].l+1))
return tree[i].ms; int mid = tree[i].mid();
if(k <= mid)
{
if(k >= tree[lson].r-tree[lson].rs+1) //如果在rs的范围内,加上右儿子的ls(相连)
return query(lson,k) + query(rson,mid+1);
else
return query(lson,k);
}
else
{
if(k <= tree[rson].ls+tree[rson].l-1) //同理
return query(rson,k)+query(lson,mid);
else
return query(rson,k);
}
} int qry[maxn];
char op[0];
int main()
{
int n,x,q;
int cas =1;
while(scanf("%d%d",&n,&q) != EOF)
{
int tot = 0;
build(1,1,n);
for(int i = 1; i <= q; i++)
{
scanf("%s",op);
if(op[0] == 'D')
{
scanf("%d",&x);
qry[tot++] = x;
Insert(1,x,-1);
}
else if(op[0] == 'R')
{
x = qry[--tot];
Insert(1,x,1);
}
else
{
scanf("%d",&x);
printf("%d\n",query(1,x));
}
}
}
return 0;
}

  

HDU 1540 Tunnel Warfare(最长连续区间 基础)的更多相关文章

  1. hdu 1540 Tunnel Warfare (区间线段树(模板))

    http://acm.hdu.edu.cn/showproblem.php?pid=1540 Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) ...

  2. hdu 1540 Tunnel Warfare (线段树,维护当前最大连续区间)

    Description During the War of Resistance Against Japan, tunnel warfare was carried out extensively i ...

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

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

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

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

  5. HDU 1540 Tunnel Warfare

    HDU 1540 思路1: 树状数组+二分 代码: #include<bits/stdc++.h> using namespace std; #define ll long long #d ...

  6. HDU 1540 Tunnel Warfare 平衡树 / 线段树:单点更新,区间合并

    Tunnel Warfare                                  Time Limit: 4000/2000 MS (Java/Others)    Memory Lim ...

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

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

  8. hdu 1540 Tunnel Warfare (线段树 区间合并)

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

  9. HDU 1540 Tunnel Warfare (线段树)

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

随机推荐

  1. 第二十八条:利用有限制通配符来提升API的灵活性

    如第二十五条所述,参数化类型是不可变的.类型Type1和Type2而言,不管Type1与Type2的关系,List<Type1>既不是List<Type2>的子类型,也不是也不 ...

  2. 从PRISM开始学WPF(二)Prism?

    目录: 从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Modu ...

  3. 11-移动端开发教程-zepto.js入门教程

    Zepto.js是一个轻量级的针对现代浏览器的JavaScript库, 它与jquery有着类似的api. 如果你会用jquery,那么你也会用zepto. 1. Why Zepto.js? API类 ...

  4. C语言使用vs2013进行编辑

    由于vs2013是微软开发的产品所以在windows平台下无限兼容windows所有虽然比较大,但是还是比较值得 但是在运行C程序的遇到问题就是控制台一闪而过通过ctrl+F5执行也是不管用: #in ...

  5. MSIL实用指南-生成接口

    本篇讲解怎么样生成接口,即interface. 一.创建类型创建一个接口类型依旧用ModuleBuilder的DefineType方法,但是它的第二个参数必须要有TypeAttributes.Inte ...

  6. LeetCode & Q268-Missing Number-Easy

    Array Math Bit Manipulation Description: Given an array containing n distinct numbers taken from 0, ...

  7. Win7添加php环境变量.

    1) "我的电脑"右键"属性"->高级系统设置->环境变量->系统变量->Path->编辑 2) 将PHP的执行路径的目录&quo ...

  8. api-gateway实践(04)新服务网关 - 新手入门

    一.网关引擎环境 1.下载代码 2.搭建环境 3.打包部署 二.配置中心环境 1.下载代码 2.搭建环境 3.打包部署 三.创建业务实例 1.以租户身份登录配置中心,注册 group.version. ...

  9. Stanford依存句法关系解释

    ROOT:要处理文本的语句 IP:简单从句 NP:名词短语 VP:动词短语 PU:断句符,通常是句号.问号.感叹号等标点符号 LCP:方位词短语 PP:介词短语 CP:由'的'构成的表示修饰性关系的短 ...

  10. 2018年html5入门到精通教程电子书百度云盘下载共22本

    名称 查看 <HTML5启动和运行>(HTML5.Up.and.Running)扫描版[PDF] 下载 <Pro HTML5 Performance>(Pro HTML5 Pe ...