询问操作需要搞一下

今天被区间合并降智了

/*
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. STL之partition学习

    顺便存一下numeric函数的使用方法吧,感觉用处不大. https://blog.csdn.net/baishuo8/article/details/84073565 partition函数,将元素 ...

  2. Javascript - Jquery - 筛选

    筛选(JQuery Selector) JQuery是一个JavaScript库,它极大地简化了JavaScript编程.整个JQuery库的方法都在$这个工厂函数里,我们只需要使用$函数,而$函数会 ...

  3. python,栈的小例子

    ''' 1.首先确认栈的概念,先进后出 2.初始化的时候如果给了一个数组那么就要将数组进栈 ''' class Stack: def __init__(self,start=[]): self.sta ...

  4. DataGrid 查出一个列 按要求显示格式 例如:操作人(地点)

    这是转换DataGrid显示格式之后 连接字符串的方法 显示:操作人(地点) public static ObservableCollection<CListModel> AllUserL ...

  5. HBSX2019 3月训练

    Day 1 3月有31天废话 今天先颓过了就只剩30天了 初步计划 每天一道字符串/数据结构题 图论学习 根据<若干图论模型探讨>(lyd)复习 二分图与网络流学习 <算法竞赛进阶指 ...

  6. 【ARTS】01_19_左耳听风-20190318~20190324

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  7. dubbo源码分析13——服务本地暴露 exportLocal(url)

    dubbo服务的本地暴露,显然是针对当服务消费者和服务提供者都在同一个jvm的进程内这种场景 .通常是发生在服务之间的调用的情况下.一种情况就是A服务调用B服务的情况,如果A服务和B服务都是在一个线程 ...

  8. 创建一个yum源,rpm安装二进制包

    作者:邓聪聪 安装mariadb vi /etc/yum.repos.d/mariadb.repo [mariadb]name=mariadbbaseurl=http://mirrors.neusof ...

  9. 最全的libcurl库资源整理

    C++ 用libcurl库进行http 网络通讯编程 百度登陆协议分析!!!用libcurl来模拟百度登陆 C++使用libcurl做HttpClient 使用libcurl库进行HTTP的下载 li ...

  10. MFCWinInet学习

    http://blog.csdn.net/segen_jaa/article/details/6278167 背景: 功能:服务端下载文件 服务端:用Java写Sevlet进行有效性验证 客户端:用C ...