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. 【USACO09OCT】热浪Heat Wave

    题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ...

  2. Python Django的生产部署方式

    本地化部署的Django有很大的局限性,无法用于生产环境,比如无法抗住多并发,无法长时间的运行,容易造成网页无响应的问题.所以如何将Django部署到真正的生产环境中,让其能够真正的像正常的网页一样工 ...

  3. Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference

    尝试在一个空的对象引用上引用boolean java.util.List.add()这个方法: 错误例子: private ArrayList<String> classList; cla ...

  4. 进入TP-Link路由器之后利用快捷键F12查看星号路由密码的方法

    今天又破解了几个路由器,这两张图片是大多数路由器如TP-LINK路由器查看拨号圆点密码的方法.

  5. 关于eclipse安装Genymotion插件的方法

    其实Genymotion的安装方法也有两种:在线安装和离线安装,不过推荐使用在线安装,这个更快.这里我只说在线安装的方法. 打开eclipse,点击help-install new software ...

  6. Throwable.异常

    异常: 在运行期间发生的不正常情况. 在JAVA中用类的形式对异常的情况进行了类的封装. 这些描述不正常情况的类就称为异常类. 异常类就是java通过面向对象的思想将问题封装成了对象.用异常类对问题进 ...

  7. guava cache使用和源码分析

    guava cache的优点和使用场景,用来判断业务中是否适合使用此缓存 介绍常用的方法,并给出示例,作为使用的参考 深入解读源码. guava简介 guava cache是一个本地缓存.有以下优点: ...

  8. Mac安装pycharm 的下载链接和破解方法

     PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制 ...

  9. vue小demo易错点总结

    1.在使用<transiton>添加过渡效果时,对应的标签需使用<router-link>,否则,transition不会达到应有的效果. 2.在路由文件里获取根实例时,需通过 ...

  10. django初探-创建简单的博客系统(二)

    上篇django初探-创建简单的博客系统(一)已经记录了Django实现博客的发布的整个过程,接下来继续说明博客标题和内容的显示. 显示博客详细 将博客内容保存到数据库还不是发布博客的终极目的,博客一 ...