询问操作需要搞一下

今天被区间合并降智了

/*
D a: 摧毁第a个点
Q a:询问a所在的点的块大小
R :修复最后被破坏的点
对于所有的点需要进行一次更新
更新比较容易,tag用来表示区间是否是完整的
查询时如果pos所在的大块有tag标记,那么直接返回块的大小即可
反之,如果pos在左区间,那就到左区间里去找:
如果pos的位置和rmx[rt<<1]相连,那么答案就是rmx[rt<<1]+lmx[rt<<1|1]
如果不相连,那么递归到左区间里找
如果pos在右区间,
如果pos的位置和lmx[rt<<1|1]相连,那么答案就是rmx[rt<<1]+lmx[rt<<1|1]
如果不相连,那么递归到右区间里找
如果 l==r并且tag==0,那么就是0
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 50005
int n,m;
stack<int>s; #define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int tag[maxn<<],mx[maxn<<],lmx[maxn<<],rmx[maxn<<];
void pushup(int l,int r,int rt){
lmx[rt]=lmx[rt<<],rmx[rt]=rmx[rt<<|];
mx[rt]=max(mx[rt<<],mx[rt<<|]);
int m=l+r>>;
if(lmx[rt<<]==m-l+)lmx[rt]=lmx[rt<<]+lmx[rt<<|];
if(rmx[rt<<|]==r-m)rmx[rt]=rmx[rt<<]+rmx[rt<<|];
mx[rt]=max(mx[rt],max(lmx[rt],rmx[rt]));
mx[rt]=max(mx[rt],rmx[rt<<]+lmx[rt<<|]); if(mx[rt]!=r-l+)tag[rt]=;
else tag[rt]=;
}
void build(int l,int r,int rt){
tag[rt]=;
if(l==r){mx[rt]=lmx[rt]=rmx[rt]=;return;}
int m=l+r>>;
build(lson);build(rson);
pushup(l,r,rt);
}
void update(int pos,int l,int r,int rt,int val){
if(l==r){mx[rt]=lmx[rt]=rmx[rt]=tag[rt]=val;return;}
int m=l+r>>;
if(pos<=m)update(pos,lson,val);
else update(pos,rson,val);
pushup(l,r,rt);
}
int query(int pos,int l,int r,int rt){
if(mx[rt]==)return ;
else if(tag[rt])return mx[rt];
int m=l+r>>;
if(pos<=m){
if(pos>=m-rmx[rt<<]+)
return query(pos,lson)+lmx[rt<<|];
else return query(pos,lson);
}
else {
if(pos<=m+lmx[rt<<|])
return query(pos,rson)+rmx[rt<<];
else return query(pos,rson);
}
}
int main(){
while(cin>>n>>m){
build(,n,);
while(m--){
char opt[];int a;
cin>>opt;
if(opt[]!='R')cin>>a;
if(opt[]=='D')update(a,,n,,),s.push(a);
if(opt[]=='Q')cout<<query(a,,n,)<<'\n';
if(opt[]=='R')update(s.top(),,n,,),s.pop();
}
}
}

hdu1540 区间合并+询问某点的最大连续块的更多相关文章

  1. HDU1540 区间合并

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

  2. poj3667 区间合并,找最左边的空余块

    题很简单:给两个操作1:查找最左边的a个空余块并填满 2:把从第a个开始的连续b个块置空 线段树维护左连续,右连续,最大连续,lazy-tag即可,query函数值得学习 #include<io ...

  3. HDU 3911 线段树区间合并

    北京赛区快了,准备袭击数据结构和图论.倒计时 18天,线段树区间合并.维护一个最长连续.. 题意:给一个01串,以下有一些操作,问区间最长的连续的1的个数 思路:非常裸的线段树区间合并 #includ ...

  4. Tunnel Warfare(HDU1540+线段树+区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目: 题意:总共有n个村庄,有q次操作,每次操作分为摧毁一座村庄,修复一座村庄,和查询与询问的 ...

  5. ACM: Hotel 解题报告 - 线段树-区间合并

    Hotel Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description The ...

  6. HYSBZ 1858 线段树 区间合并

    //Accepted 14560 KB 1532 ms //线段树 区间合并 /* 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[ ...

  7. HDU-3308 LCIS(区间合并)

    题目大意:给一个整数序列,m次询问,每次询问某个区间中最长连续上升子序列的长度. 题目分析:线段树区间合并.维护以区间左端开头的.以区间右端点结尾的和区间最长的上升连续序列. 代码如下: # incl ...

  8. 线段树(区间合并) POJ 3667 Hotel

    题目传送门 /* 题意:输入 1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 输入 2 a b:将[a,a+b-1]的房间清空 线段树(区间合并):lsum[]统计从左端点起最长连续空房间 ...

  9. HDU5107---K-short Problem (线段树区间 合并、第k大)

    题意:二维平面上 N 个高度为 Hi 建筑物,M次询问,每次询问输出 位于坐标(x ,y)左下角(也就是xi <= x && yi <= y)的建筑物中的第k高的建筑物的高 ...

随机推荐

  1. 【tmos】spring boot项目中处理Schedule定时任务

    我的代码 /** * Author:Mr.X * Date:2017/10/30 14:54 * Description: */ @Component @Configurable @EnableSch ...

  2. Polish Extraction Zone

    声明贴花组件 UPROPERTY(VisibleAnywhere, Category = "Components") UDecalComponent* DecalComp; 添加头 ...

  3. 2017-2018-2 20165237 实验二《Java面向对象程序设计》实验报告

    ##2017-2018-2 20165237 实验二<Java面向对象程序设计>实验报告 No.1 实验要求: 实验三 敏捷开发与XP实践 http://www.cnblogs.com/r ...

  4. 【Math for ML】矩阵分解(Matrix Decompositions) (下)

    [Math for ML]矩阵分解(Matrix Decompositions) (上) I. 奇异值分解(Singular Value Decomposition) 1. 定义 Singular V ...

  5. spring-session+Redis实现Session共享

    关于session共享的方式有多种: (1)通过nginx的ip_hash,根据ip将请求分配到对应的服务器 (2)基于关系型数据库存储 (3)基于cookie存储 (4)服务器内置的session复 ...

  6. python3-多装饰器的执行顺序

    [例]: def dec1(func): print("HHHA:0====>") def one(): print("HHHA:0.1====>" ...

  7. 判断HDFS文件是否存在

    hadoop判断文件是否存在 在shell中判断一个HDFS目录/文件是否存在 直接看shell代码: hadoop fs -test -e /hdfs_dirif [ $? -ne 0 ]; the ...

  8. MySQL如何启用密码强度审计【转】

    1.密码验证插件安装 要使服务器可以使用,插件库文件必须位于MySQL插件目录(plugin_dir系统变量指定的目录)中.如有必要,请设置plugin_dir服务器启动时的值, 以告知服务器插件目录 ...

  9. linux shell 进阶篇、shell脚本编程-创建函数

    使用函数 #!/bin/bash # testing the script function myfun { echo "This is an example of a function&q ...

  10. 拿什么守护你的Node.JS进程: Node出错崩溃了怎么办?

    被吐嘈的NodeJS的异常处理 许多人都有这样一种映像,NodeJS比较快: 但是因为其是单线程,所以它不稳定,有点不安全,不适合处理复杂业务: 它比较适合对并发要求比较高,而且简单的业务场景. 在E ...