I - Tunnel Warfare - hdu 1540(区间合并更新)
题意:在抗日战争期间,地道战在华北平原得到广泛的实施,一般而言,村庄通过一些隧道在一条线上连接,除了两端剩下的每个村庄都有两个相连。
#include<stdio.h>
#include<algorithm>
#include<stack>
using namespace std; const int maxn = ; struct node
{//sum代表区间种最大的连续区间,lsum代表左端能到达的最右端的个数
int L, R, sum, lsum, rsum;
int Mid(){return (L+R)/;}
int Len(){return (R-L+);}
}a[maxn*]; void Up(int r)
{
a[r].lsum = a[r<<].lsum, a[r].rsum = a[r<<|].rsum; if(a[r<<].lsum == a[r<<].Len())
a[r].lsum = a[r<<].lsum + a[r<<|].lsum;
if(a[r<<|].rsum == a[r<<|].Len())
a[r].rsum = a[r<<|].rsum + a[r<<].rsum; a[r].sum = max(a[r].lsum, max(a[r].rsum, a[r<<].rsum+a[r<<|].lsum));
}
void Build(int r, int L, int R)
{
a[r].L = L, a[r].R = R;
a[r].lsum = a[r].rsum = a[r].sum = a[r].Len(); if(L == R)return ; Build(r<<, L, a[r].Mid());
Build(r<<|, a[r].Mid()+, R);
}
void Insert(int r, int k, int e)
{
if( a[r].L == a[r].R )
{
a[r].lsum = a[r].rsum = a[r].sum = e;
return ;
} if(k <= a[r].Mid())
Insert(r<<, k, e);
else
Insert(r<<|, k, e); Up(r);
}
int Query(int r, int k)
{
if(a[r].sum == )return ;
if(k < a[r].L+a[r].lsum)return a[r].lsum;//判断是否在左边
if(k > a[r].R-a[r].rsum)return a[r].rsum;//判断是否在右边
if(k > a[r<<].R-a[r<<].rsum && k < a[r<<|].L+a[r<<|].lsum)//判断是否在中间
return a[r<<].rsum + a[r<<|].lsum; if(k <= a[r].Mid())
return Query(r<<, k);
else
return Query(r<<|, k);
} int main()
{
int N, M; while(scanf("%d%d", &N, &M) != EOF)
{
int x; char s[];
stack<int> sta; Build(, , N); while(M--)
{
scanf("%s", s); if(s[] == 'D')
{
scanf("%d", &x);
Insert(, x, );
sta.push(x);
}
else if(s[] == 'R' && sta.size())
{
Insert(, sta.top(), );
sta.pop();
}
else if(s[] == 'Q')
{
scanf("%d", &x);
printf("%d\n", Query(, x));
}
}
} return ; }
I - Tunnel Warfare - hdu 1540(区间合并更新)的更多相关文章
- Tunnel Warfare HDU 1540 区间合并+最大最小值
Tunnel Warfare HDU 1540 区间合并+最大最小值 题意 D x是破坏这个点,Q x是表示查询以x所在的最长的连续的点的个数,R是恢复上一次破坏的点. 题解思路 参考的大佬博客 这里 ...
- E - Tunnel Warfare HDU - 1540 F - Hotel G - 约会安排 HDU - 4553 区间合并
E - Tunnel Warfare HDU - 1540 对这个题目的思考:首先我们已经意识到这个是一个线段树,要利用线段树来解决问题,但是怎么解决呢,这个摧毁和重建的操作都很简单,但是这个查询怎么 ...
- (线段树 区间合并更新)Tunnel Warfare --hdu --1540
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1540 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- HDU 1540 Tunnel Warfare 线段树区间合并
Tunnel Warfare 题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少 思路:一个节点的最大连续区间由(左儿子的最大的连续区间,右儿子的最大连续区 ...
- Tunnel Warfare 线段树 区间合并|最大最小值
B - Tunnel WarfareHDU - 1540 这个有两种方法,一个是区间和并,这个我个人感觉异常恶心 第二种方法就是找最大最小值 kuangbin——线段树专题 H - Tunnel Wa ...
- Tunnel Warfare HDU - 1540 (线段树处理连续区间问题)
During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast a ...
- HDU1540 Tunnel Warfare —— 线段树 区间合并
题目链接:https://vjudge.net/problem/HDU-1540 uring the War of Resistance Against Japan, tunnel warfare w ...
- hdu 1540 Tunnel Warfare 线段树 区间合并
题意: 三个操作符 D x:摧毁第x个隧道 R x:修复上一个被摧毁的隧道,将摧毁的隧道入栈,修复就出栈 Q x:查询x所在的最长未摧毁隧道的区间长度. 1.如果当前区间全是未摧毁隧道,返回长度 2. ...
- POJ 2892 Tunnel Warfare || HDU 1540(树状数组+二分 || 线段树的单点更新+区间查询)
点我看题目 题意 :N个村子连成一条线,相邻的村子都有直接的地道进行相连,不相连的都由地道间接相连,三个命令,D x,表示x村庄被摧毁,R ,表示最后被摧毁的村庄已经重建了,Q x表示,与x直接或间 ...
随机推荐
- AsyncTask 解析
[转载自 http://blog.csdn.net/yanbober ] 1 背景 Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个知识点.前面我们分析了Handl ...
- Win10中英文的切换
在UAP中,涉及到中英文版本切换,在string目录下面添加资源str 读取的时候 new Windows.ApplicationModel.Resources.ResourceLoader().Ge ...
- 动态的显示当前的时间---setInterval的用法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 该项目中不存在目标 precomputecompiletypescript The target "PreComputeCompileTypeScript" does not exist in the project
Open Microsoft.TypeScript.targets file located under C:\Program Files (x86)\MSBuild\Microsoft\Visual ...
- 最全ASCLL码
结果 描述 实体编号 space ! exclamation mark ! " quotation mark " # number sign # $ dollar sign $ ...
- WebService CXF调试常见报错及解决方案
1.CXF java.lang.RuntimeException: Cannot create a secure XMLInputFactory 解决方案:从apache-cxf/lib下寻找Wood ...
- 如果使用的是orm,是否还需要关系索引
简而言之:是的,仍然需要理解索引,即使是使用对象关系映射(ORM)工具. ORM工具能够产生符合逻辑的,合法的查询(多数的时候),除非只是生成非常基本的查询(例如仅是根据主键查询的),否则它很难生成适 ...
- windows phone使用sharpcompress进行解压压缩文件
在做移动端时,当我们需要从服务器获得多个文件时,为了节约流量,服务器一般会返回一个压缩包,那我们就是下载完成后,在手机中进行解压到指定位置 SharpCompress就是可以在手机中进行解压一个类库( ...
- 浮点与整形在GUI下的相关思考
平时不接触绘图,似乎感觉不到浮点和整形所带来的区别,这次项目中意外的碰到了浮点与整形进行迁移的工作.因此写点心得,让自己以后也可以看看. 用浮点作图有个最大的弊端就是边界情况,比如你需要在点(20,2 ...
- Java JNDI Datasource HOW-TO Problem
在开发JAVA的时候发生了点问题,解决方案记录一下,在这里http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto. ...