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. tp3.2 URL_MODEL为2 配置

    1. tp项目index.php同级目录  add . htaccess文件 ,rewirte重写 内容为: <IfModule mod_rewrite.c> Options +Follo ...

  2. c#抽取pdf文档标题(2)

    public class IETitle { public static List<WordInfo> WordsInfo = new List<WordInfo>(); pr ...

  3. Entity Framework Core 之数据库迁移

    前言 最近打算用.NET Core写一份开源的简易CMS系统,来练练手 所以又去深入研究了一下Entity Framework Core 发现其实有些细节园子里还是很少讲到. 特意整理了几个细节. 正 ...

  4. mysql性能分析之explain的用法

    之前是一直没有听过explain这个关键字的, 最近因为项目中总是会有慢查询的一些操作, 所以请教了旁边的同事帮忙排查下原因, 看到同事用explain来分析一些sql语句, 感觉好像发现了新大陆一样 ...

  5. Linux shell 脚本(二)

    转载请标明出处:  http://blog.csdn.net/zwto1/article/details/45078837:  本文出自:[明月的博客] 五.字符串处理 1.子串截取操作: 路径分割: ...

  6. Spring Boot会员管理系统——处理文件上传

    温馨提示 Spring Boot会员管理系统的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎.所以,可以学习下这些知识.当然,直接入门的话使 ...

  7. python 检测nginx状态,若无法访问发邮件通知

    应用场景:用来检测网站可用性,访问失败,则发邮件通知 #!/usr/bin/env python import urllib2,time,smtplib,string,logging from con ...

  8. PAT乙级-1037. 在霍格沃茨找零钱(20)

    如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易.& ...

  9. Go基础之锁的初识

    当我们的程序就一个线程的时候是不需要用到锁的,但是通常我们实际的代码不会是单个线程的,所有这个时候就需要用到锁了,那么关于锁的使用场景主要涉及到哪些呢? 当我们多个线程在读相同的数据的时候则是需要加锁 ...

  10. C语言第九次博客作业--指针

    一.PTA实验作业 题目1:两个4位正整数的后两位互换 1. 本题PTA提交列表 2. 设计思路 定义循环变量i,两个数组a[4],b[4] for i=0 to 3 a[i]*p取各个位 *p/=1 ...