hdu 3911 线段树的区间合并
来源:互联网 发布:淘宝个人好评率怎么看 编辑:程序博客网 时间:2024/06/05 05:31
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#define N 500010#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;int s1[N],s2[N],l1[N],r1[N],l2[N],r2[N],d[N];inline int MAX(int a,int b){return a>b?a:b;}inline int MIN(int a,int b){return a<b?a:b;}void diverse(int rt){swap(l1[rt],l2[rt]);swap(r1[rt],r2[rt]);swap(s1[rt],s2[rt]);}void pushup(int l,int r,int rt){int m=(l+r)>>1;l1[rt]=l1[rt<<1];l2[rt]=l2[rt<<1];if(l1[rt<<1]==(m-l+1))l1[rt]+=l1[rt<<1|1];if(l2[rt<<1]==(m-l+1))l2[rt]+=l2[rt<<1|1];r1[rt]=r1[rt<<1|1];r2[rt]=r2[rt<<1|1];if(r1[rt<<1|1]==(r-m))r1[rt]+=r1[rt<<1];if(r2[rt<<1|1]==(r-m))r2[rt]+=r2[rt<<1];s1[rt]=MAX(r1[rt<<1]+l1[rt<<1|1],MAX(s1[rt<<1],s1[rt<<1|1]));s2[rt]=MAX(r2[rt<<1]+l2[rt<<1|1],MAX(s2[rt<<1],s2[rt<<1|1]));}void pushdown(int rt){if(d[rt]){d[rt<<1]^=1;d[rt<<1|1]^=1;d[rt]=0;diverse(rt<<1);diverse(rt<<1|1);}}void build(int l,int r,int rt){d[rt]=0;if(l==r){int t;scanf("%d",&t);l1[rt]=r1[rt]=s1[rt]=t;l2[rt]=r2[rt]=s2[rt]=!t;return ;}int m=(l+r)>>1;build(lson);build(rson);pushup(l,r,rt);}void update(int a,int b,int l,int r,int rt){if(b<l||a>r)return ;if(a<=l&&r<=b){d[rt]^=1;diverse(rt);return ;}pushdown(rt);int m=(l+r)>>1;update(a,b,lson);update(a,b,rson);pushup(l,r,rt);}int query(int a,int b,int l,int r,int rt){if(b<l||a>r)return 0;if(a<=l&&r<=b)return s1[rt];pushdown(rt);int m=(l+r)>>1;int res1=query(a,b,lson);int res2=query(a,b,rson);return MAX(MIN(m-a+1,r1[rt<<1])+MIN(b-m,l1[rt<<1|1]),MAX(res1,res2)); } int main(){int n;while(~scanf("%d",&n)){build(1,n,1);int q;scanf("%d",&q);while(q--){int t,a,b;scanf("%d%d%d",&t,&a,&b);if(t)update(a,b,1,n,1);else printf("%d\n",query(a,b,1,n,1));}}}
阅读全文
0 0
- hdu 3911 线段树的区间合并
- hdu 3911 线段树基本功 区间合并
- HDU 3911 线段树区间合并
- hdu 3911 线段树+区间合并
- hdu 3308(线段树的区间合并)
- LCIS+hdu+线段树简单的区间合并
- HDU 3397 Sequence operation(线段树的区间合并)
- HDU 3308 LCIS(线段树的区间合并)
- HDU 3308 LCIS 线段树的单点更新,区间合并
- HDU 4553 约会安排 (线段树 -- 区间合并(多种优先级的区间合并) )
- hdu 3911 Black And White 区间合并 线段树
- HDU 3911 Black And White(线段树区间合并)
- hdu 3911 Black And White 线段树区间合并
- HDU 3911 线段树区间合并+异或操作
- hdu 3911 black and white 线段树区间合并
- hdu 3397(线段树区间合并)
- HDU 3308 线段树+区间合并
- hdu 3308 LCIS 线段树 区间合并
- java8 in action 学习笔记 一
- POJ 2504 Bounding box 笔记
- Android 内存分析命令
- 前摄器(Proactor):用于为异步事件多路分离和分派处理器的对象行为模式
- js对象、数字深拷贝方式(转)
- hdu 3911 线段树的区间合并
- Websphere7.0修改JVM的内存设置 http://download.csdn.net/detail/zhaolong1990ok/5268650
- python3 网络爬虫(二)利用get请求获取网页的动态加载数据
- 字符串置换
- PHP个人常用简单命名规范以及搜集的相关命名规范
- 维护成本控制范围(激活利润中心)
- layer
- Multisim安装与卸载
- Git常用命令