HDU 1540 POJ 2892 Tunnel Warfare
线段树 区间合并 单点修改 区间查询。又是1秒钟构思,差错查了好久... ... 发现一个int型的定义成了char型,打脸。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std; const int maxn= +;
int N,Q;
char op[];
int num;
stack<int>S;
bool flag[maxn];
struct SegTree
{
int lsum,rsum,msum;
}segTree[*maxn];
int fail,ans1,ans2; void pushUp(int rt,int len)
{
if(segTree[*rt].lsum==len-len/)
segTree[rt].lsum=segTree[*rt].lsum+segTree[*rt+].lsum;
else segTree[rt].lsum=segTree[*rt].lsum; if(segTree[*rt+].rsum==len/)
segTree[rt].rsum=segTree[*rt].rsum+segTree[*rt+].rsum;
else segTree[rt].rsum=segTree[*rt+].rsum; segTree[rt].msum=max(segTree[*rt].msum,segTree[*rt+].msum);
segTree[rt].msum=max(segTree[rt].msum,segTree[*rt+].lsum+segTree[*rt].rsum);
} void build(int l,int r,int rt)
{
if(l==r)
{
segTree[rt].lsum=segTree[rt].rsum=segTree[rt].msum=;
return;
} int m=(l+r)/;
build(l,m,*rt);
build(m+,r,*rt+);
pushUp(rt,r-l+);
} void update(int info,int node,int l,int r,int rt)
{
if(l==r&&node==l)
{
segTree[rt].lsum=segTree[rt].rsum=segTree[rt].msum=info;
return;
} int m=(l+r)/;
if(node<=m) update(info,node,l,m,*rt);
else update(info,node,m+,r,*rt+); pushUp(rt,r-l+);
} void quary1(int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R)
{
ans1=ans1+segTree[rt].rsum;
if(segTree[rt].rsum!=r-l+) fail=;
return;
} int m=(l+r)/;
if(R>m) quary1(L,R,m+,r,*rt+);
if(fail) return;
if(L<=m) quary1(L,R,l,m,*rt);
if(fail) return;
} void quary2(int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R)
{
ans2=ans2+segTree[rt].lsum;
if(segTree[rt].lsum!=r-l+) fail=;
return;
} int m=(l+r)/;
if(L<=m) quary2(L,R,l,m,*rt);
if(fail) return;
if(R>m) quary2(L,R,m+,r,*rt+);
if(fail) return;
} int main()
{
// freopen("in.txt","r",stdin);
while(~scanf("%d%d",&N,&Q))
{
while(!S.empty()) S.pop(); build(,N,);
for(int i=;i<=N;i++) flag[i]=; for(int i=;i<=Q;i++)
{
scanf("%s",op);
if(op[]=='D')
{
scanf("%d",&num);
S.push(num);
flag[num]=;
update(,num,,N,);
}
else if(op[]=='Q')
{
scanf("%d",&num);
if(!flag[num]) printf("%d\n",);
else
{
ans1=,ans2=;
fail=;
if(num->=) quary1(,num-,,N,);
fail=;
if(num+<=N) quary2(num+,N,,N,); int ans=ans1+ans2+; printf("%d\n",ans);
}
}
else if(op[]=='R')
{
if(S.empty()) continue;
num=S.top();
S.pop();
flag[num]=;
update(,num,,N,);
}
}
}
return ;
}
HDU 1540 POJ 2892 Tunnel Warfare的更多相关文章
- hdu 1540/POJ 2892 Tunnel Warfare 【线段树区间合并】
Tunnel Warfare Time Limit: 4000/2000 MS ...
- HDU 1540 / POJ 2892 Tunnel Warfare (单点更新,区间合并,求包含某点的最大连续个数)
题意:一条线上有n个点,D x是破坏这个点,Q x是表示查询x所在的最长的连续的点的个数,R是恢复上一次破坏的点. 思路:这题的关键是查询. 将被毁的村庄看成空位,当查询某个点的时候,如果我们知道它左 ...
- POJ 2892 Tunnel Warfare(线段树单点更新区间合并)
Tunnel Warfare Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 7876 Accepted: 3259 D ...
- POJ 2892 Tunnel Warfare
传送门 很神奇的一道题,可以用线段树搞,为了练习treap所以拿treap写了. 其实根据询问,删除那个标号就加入平衡树,然后找到最大的和最小的就好了. 一些很烦人的小细节. //POJ 2892 / ...
- poj 2892 Tunnel Warfare(线段树)
Tunnel Warfare Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 7499 Accepted: 3096 D ...
- POJ 2892 Tunnel Warfare || HDU 1540(树状数组+二分 || 线段树的单点更新+区间查询)
点我看题目 题意 :N个村子连成一条线,相邻的村子都有直接的地道进行相连,不相连的都由地道间接相连,三个命令,D x,表示x村庄被摧毁,R ,表示最后被摧毁的村庄已经重建了,Q x表示,与x直接或间 ...
- POJ 2892 Tunnel Warfare (SBT + stack)
题意:给定了初始的状态:有n个村庄连成一条直线,现在有三种操作: 1.摧毁一个村庄 2.询问某个村庄,输出与该村庄相连的村庄数量(包括自己) 3.修复被摧毁的村庄,优先修复最近被摧毁的........ ...
- POJ 2892 Tunnel Warfare(树状数组+二分)
题目链接 二分求上界和下界,树状数组.注意特殊情况. #include <cstring> #include <cstdio> #include <string> ...
- 【POJ】2892 Tunnel Warfare
[算法]平衡树(treap) [题解]treap知识见数据结构 在POJ把语言从G++换成C++就过了……??? #include<cstdio> #include<algorith ...
随机推荐
- centos中jdk配置
为了搭建jenkins环境,我这里必须先要配置jdk,我的系统环境时centos6.5,首先申明的是我系统是新系统,没有安装过jdk 我这里准备的安装包是jdk-7u80-linux-x64.gz. ...
- perl-cgi高级
来源: http://www.cnblogs.com/itech/archive/2012/10/07/2714393.html 一 CGI.pm中的方法(routines)调用 1. CGI.pm ...
- spice-vdagent
The spice-vdagent should be running in the guest. Have you installed the spice guest tools in your w ...
- Linux下安装php开发框架yaf
yaf框架中文手册:http://yaf.laruence.com/manual/index.html yaf手册:http://www.php.net/manual/en/book.yaf.php ...
- java解析xml文件并输出
使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayLi ...
- IMP指针
可能大家一直看到有许多朋友在Runtime相关文章中介绍IMP指针的概念,那么IMP究竟有什么实际作用呢?让我们先从一个函数看起来. Method Swizzling 如果对Runtime有一定了解的 ...
- UIApplicationDelegate 协议 浅析
@protocol UIApplicationDelegate<NSObject> @optional - (void)applicationDidFinishLaunching:(UIA ...
- [转]于Fragment和Activity之间onCreateOptionsMenu的问题
Fragment和Activity一样,可以重写onCreateOptionsMenu方法来设定自己的菜单,其实这两个地方使用onCreateOptionsMenu的目的和效果都是完全一样的,但是由于 ...
- Hbase shell 中能否通过filter实现的高级查询
import org.apache.hadoop.hbase.filter.CompareFilter import org.apache.hadoop.hbase.filter.SingleColu ...
- 一个很好的通用 excel 导出工具类
此类用主要 jxl +注解+流 实现扩展性很强,jxl性能会比poi好一点,值得我们学习. package oa.common.utils; import java.io.OutputStream; ...