http://www.lydsy.com/JudgeOnline/problem.php?id=4592

注意操作1 先挖再补,就是补的范围可以包含挖的范围

SHOI2015 的题 略水啊(逃)

#include<cstdio>
#include<iostream> #define N 200001 using namespace std; #define max(x,y) ((x)>(y) ? (x) : (y))
#define min(x,y) ((x)<(y) ? (x) : (y)) struct node
{
int L0,R0,mx0;
int siz; node operator + (node p) const
{
node A;
A.L0=L0;
if(L0==siz) A.L0+=p.L0;
A.R0=p.R0;
if(p.R0==p.siz) A.R0+=R0;
A.mx0=max(mx0,p.mx0);
A.mx0=max(A.mx0,R0+p.L0);
A.siz=siz+p.siz;
return A;
} }tr[N<<]; int sum1[N<<];
int tag[N<<]; int tot; int n; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void build(int k,int l,int r)
{
tag[k]=-;
tr[k].L0=tr[k].R0=tr[k].mx0=;
tr[k].siz=sum1[k]=r-l+;
if(l==r) return;
int mid=l+r>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
} void tagging(int k,int w)
{
if(w) sum1[k]=tr[k].siz,tr[k].L0=tr[k].R0=tr[k].mx0=;
else sum1[k]=,tr[k].L0=tr[k].R0=tr[k].mx0=tr[k].siz;
tag[k]=w;
} void down(int k)
{
tagging(k<<,tag[k]);
tagging(k<<|,tag[k]);
tag[k]=-;
} void change(int k,int l,int r,int opl,int opr,int w)
{
if(l>=opl && r<=opr)
{
tagging(k,w);
return;
}
if(tag[k]!=-) down(k);
int mid=l+r>>;
if(opl<=mid) change(k<<,l,mid,opl,opr,w);
if(opr>mid) change(k<<|,mid+,r,opl,opr,w);
sum1[k]=sum1[k<<]+sum1[k<<|];
tr[k]=tr[k<<]+tr[k<<|];
} void query(int k,int l,int r,int opl,int opr,int w)
{
if(l>=opl && r<=opr)
{
if(w) tot+=sum1[k];
else tot+=tr[k].siz-sum1[k];
return;
}
if(tag[k]!=-) down(k);
int mid=l+r>>;
if(opl<=mid) query(k<<,l,mid,opl,opr,w);
if(opr>mid) query(k<<|,mid+,r,opl,opr,w);
} int find(int L,int cnt)
{
int R=L,mid;
int l=L,r=n;
while(l<=r)
{
mid=l+r>>;
tot=;
query(,,n,L,mid,);
if(tot<=cnt) l=mid+,R=mid;
else r=mid-;
}
return R;
} node Query(int k,int l,int r,int opl,int opr)
{
if(l==opl && r==opr) return tr[k];
if(tag[k]!=-) down(k);
int mid=l+r>>;
if(opr<=mid) return Query(k<<,l,mid,opl,opr);
if(opl>mid) return Query(k<<|,mid+,r,opl,opr);
return Query(k<<,l,mid,opl,mid)+Query(k<<|,mid+,r,mid+,opr);
} int main()
{
int m;
read(n); read(m);
build(,,n);
int ty,l,r,ll,rr;
int pos;
while(m--)
{
read(ty); read(l); read(r);
if(!ty) change(,,n,l,r,);
else if(ty==)
{
tot=;
query(,,n,l,r,);
change(,,n,l,r,);
read(ll); read(rr);
if(!tot) continue;
pos=find(ll,tot); //从l起,tot个1能补到哪儿
change(,,n,ll,min(pos,rr),);
}
else printf("%d\n",Query(,,n,l,r).mx0);
}
}

bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪的更多相关文章

  1. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  2. bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机

    http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...

  3. bzoj千题计划279:bzoj4591: [Shoi2015]超能粒子炮·改

    http://www.lydsy.com/JudgeOnline/problem.php?id=4591 最后的式子合并同类项 #include<cstdio> #include<i ...

  4. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  5. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...

  6. bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...

  7. bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)

    https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...

  8. bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹

    http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...

  9. bzoj千题计划250:bzoj3670: [Noi2014]动物园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...

随机推荐

  1. 初学者第二节之HelloWorld

    ava具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移植性.多线程.动态性等特点.Java可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等. 一.首先创建一个Hell ...

  2. 微信小程序之实现页面缩放式侧滑效果

    效果图: 实现原理:点击按钮,往需要动画的div中添加或移除拥有动画效果的class. 由于微信小程序中不能操作page这个根节点,所以,只有用一个div(view)来模仿page根节点. 1.结构 ...

  3. 用Tortoisegit往GitHub上push时,失败并显示git did not exit cleanly (exit code 1),可能是GitHub的Email的原因

    之前我看到错误,总是没有耐心地读完整个错误,而是不假思索地搜索一部分错误,导致偏离正确轨道,相当于号错脉了,比如这里只是搜索git did not exit cleanly (exit code 1) ...

  4. C++中不同变量、函数在内存中的内存情况《转》

    一.一个C++编译的程序占用的内存分为以下几个部分 1.栈区:由编译器自动分配 存放函数的参数值,局部变量的值等,操作方式类似于数据结构中的栈. 2.堆区:一般由程序员分配释放,若程序员不释放,程序结 ...

  5. 【noip模拟】局部最小值

    TimeLimit: 1000ms               MemoryLimit: 256MB Description 有一个n行m列的整数矩阵,其中1到n×m之间的每个整数恰好出现一次.如果一 ...

  6. 小程序input输入框获取焦点时,文字会出现闪动

    最近在开发小程序时,发现一个有趣的现象.input里面设置了placeholder,随后当输入框获取焦点时,文字会出现一瞬间的抖动,随后正常. 猜想可能是设置的font-family不同引起的抖动,但 ...

  7. CentOS 静态IP分配,提示Error, some other host already uses address解决办法

    (一)第一 修改 ifup-eth vi /etc/sysconfig/network-scripts/ifup-eth #if ! /sbin/arping -q -c 2 -w 3 -D -I $ ...

  8. 无后台应用 Stash Backend

    Stash Backend 是Github上的开源项目 https://github.com/gaboratorium/stash,目的在于提供一套方便使用.方便部署的后台应用.特别适合为Web前端和 ...

  9. 属性动画 ValueAnimator 运行原理全解析

    最近下班时间都用来健身还有看书了,博客被晾了一段时间了,原谅我~~~~ 提问环节 好,废话不多说,之前我们已经分析过 View 动画 Animation 运行原理解析,那么这次就来学习下属性动画的运行 ...

  10. .net core实现redisClient

    引言 最近工作上有需要使用redis,于是便心血来潮打算自己写一个C#客户端.经过几天的努力,目前该客户端已经基本成型,下面简单介绍一下. 通信协议 要想自行实现redisClient,则必须先要了解 ...