由于脑洞的序列不会改变,考虑用线段树维护区间内sum,左边0的个数,右边0的个数,区间内最大脑洞。对于查询l~r最大脑洞可以将l~r分成logn个区间,总复杂度O(nlogn)。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#define N 800005
using namespace std;
int n,m,p,x,y,l,r;
int sum[N],L[N],R[N],tg[N],v[N],Ans[N],rest,Hz,ans;
void down(int k)
{
if (tg[k]!=-1)
{
int l=k<<1,r=l|1;
tg[l]=tg[r]=tg[k];
sum[l]=v[l]*tg[k];
sum[r]=v[r]*tg[k];
if (tg[k]==0) L[l]=R[l]=Ans[l]=v[l],L[r]=R[r]=Ans[r]=v[r];
else L[l]=R[l]=L[r]=Ans[l]=R[r]=Ans[r]=0;
tg[k]=-1;
}
}
void up(int k)
{
int l=k<<1,r=l|1;sum[k]=sum[l]+sum[r];
if (!sum[l]) L[k]=L[l]+L[r];else L[k]=L[l];
if (!sum[r]) R[k]=R[l]+R[r];else R[k]=R[r];
Ans[k]=max(max(Ans[l],Ans[r]),R[l]+L[r]);
}
void build(int k,int l,int r)
{
if (l==r){v[k]=1;return;}
int mid=(l+r)>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
v[k]=v[k<<1]+v[k<<1|1];
}
void add(int k,int l,int r,int x,int y)
{
if (x<=l&&r<=y)
{
sum[k]=0;tg[k]=0;
L[k]=R[k]=v[k];
return;
}
int mid=(l+r)>>1;
down(k);
if (x<=mid) add(k<<1,l,mid,x,y);
if (y>mid) add(k<<1|1,mid+1,r,x,y);
up(k);
}
int Get(int k,int l,int r,int x,int y)
{
if (x<=l&&r<=y) return sum[k];
int mid=(l+r)>>1;
down(k);
int Ans=0;
if (x<=mid) Ans+=Get(k<<1,l,mid,x,y);
if (y>mid) Ans+=Get(k<<1|1,mid+1,r,x,y);
return Ans;
}
void fix(int k,int l,int r,int x,int y)
{
if (!rest) return;
if (x<=l&&r<=y&&rest>=v[k]-sum[k])
{
rest-=v[k]-sum[k];
tg[k]=1;Ans[k]=0;
L[k]=R[k]=0;sum[k]=v[k];
return;
}
down(k);
int mid=(l+r)>>1;
if (x<=mid) fix(k<<1,l,mid,x,y);
if (y>mid) fix(k<<1|1,mid+1,r,x,y);
up(k);
}
void qry(int k,int l,int r,int x,int y)
{
if (x<=l&&r<=y)
{
ans=max(ans,Ans[k]);
ans=max(ans,Hz+L[k]);
if (R[k]==v[k]) Hz+=R[k];else Hz=R[k];
return;
}
down(k);
int mid=(l+r)>>1;
if (x<=mid) qry(k<<1,l,mid,x,y);
if (y>mid) qry(k<<1|1,mid+1,r,x,y);
}
int main()
{
scanf("%d%d",&n,&m);
build(1,1,n);
sum[1]=v[1];tg[1]=1;
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&p,&l,&r);
if (p==0) add(1,1,n,l,r);
else if (p==1)
{
scanf("%d%d",&x,&y);
rest=Get(1,1,n,l,r);
add(1,1,n,l,r);
fix(1,1,n,x,y);
}
else
{
ans=0;Hz=0;qry(1,1,n,l,r);
printf("%d\n",ans);
}
}
return 0;
}

  

【bzoj4592】[Shoi2015]脑洞治疗仪的更多相关文章

  1. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

  2. [BZOJ4592][SHOI2015]脑洞治疗仪(线段树)

    线段树基础操作题,唯一需要思考下的是将区间的前k个0覆盖为1. 线段树上二分,先递归到左子树覆盖,回溯时返回还剩多少个0未被覆盖,在根据这个信息递归到右子树.注意特判k=0的情况. 要维护的信息有:区 ...

  3. BZOJ4592 SHOI2015脑洞治疗仪(线段树)

    考虑需要资瓷哪些操作:区间赋值为0:统计区间1的个数:将区间前k个0变为1:询问区间最长全0子串.于是线段树维护区间1的个数.0的个数.最长前缀后缀全0子串即可.稍微困难的是用一个log实现将区间前k ...

  4. [bzoj4592] [Shoi2015]脑洞治疗仪

    题面无法直视系列. 中规中矩的线段树题. 涉及的操作有:区间赋值为0,计算区间内1的个数,区间赋值为1,求区间内最大的连续的1的个数. #include<cstdio> #include& ...

  5. 2019.01.19 bzoj4592: [Shoi2015]脑洞治疗仪(ODT)

    传送门 ODT水题. 支持区间01赋值,区间填补(把区间[l,r][l,r][l,r]从左往右数kkk个1都变成0),区间查询最长连续1个数. 思路: 区间填补操作感觉不是很好弄,写线段树的神仙可以套 ...

  6. 【BZOJ4592】[Shoi2015]脑洞治疗仪 线段树

    [BZOJ4592][Shoi2015]脑洞治疗仪 Description 曾经发明了自动刷题机的发明家SHTSC又公开了他的新发明:脑洞治疗仪--一种可以治疗他因为发明而日益增大的脑洞的神秘装置. ...

  7. 【BZOJ-4592】脑洞治疗仪 线段树

    4592: [Shoi2015]脑洞治疗仪 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 69  Solved: 38[Submit][Status] ...

  8. 【题解】Luogu P4344 [SHOI2015]脑洞治疗仪

    原题传送门:P4344 [SHOI2015]脑洞治疗仪 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 珂朵莉树好题啊 我一开始一直Re65 后来重构代码就ac了,或许是rp问题 ...

  9. [SHOI2015]脑洞治疗仪(恶心的线段树,区间最大子段和)

    题目描述: 曾经发明了自动刷题机的发明家 SHTSC 又公开了他的新发明:脑洞治疗仪--一种可以治疗他因为发明而日益增大的脑洞的神秘装置. 为了简单起见,我们将大脑视作一个 01 序列.11代表这个位 ...

随机推荐

  1. 【BIEE】新建用户,并且赋予组BIconsumer,访问BIpublisher报表报错:检索数据xml时出错

    问题描述 今天新建一个用户用户查看报表,并且赋予该用户属于BIConsumer组,但是在访问报表的时候出现以下两个错: 1.xdo格式类的报表 2.RTF模板制作的报表 解决方案: 出现这个问题的原因 ...

  2. NET SignaiR 实现消息的推送,并使用Push.js实现通知

    一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...

  3. 解决WCF接口无法传递object参数的问题

    在某些场合中,我们需要提供以object为参数的方法.不过在WCF中,由于需要序列化与反序列化,因此它要求所有WCF传递的参数类型都是已知的,无法传递object这种未知类型.即使用了KnownTyp ...

  4. DIV可编辑后,与限制输入及光标偏移的纠葛

    前言 最近在弄个人的网站,偶然间发现DIV可以设置编辑模式,之前设计的方案在此功能上需要限制输入的长度.网上搜索了一波,综合搜索的结果,考虑使用的监听事件有:keydown .textInput .i ...

  5. 微信小程序 设置计时器(setInterval)、清除计时器(clearInterval)

    1.wxml代码 <!--index.wxml--> <view class="container"> <button type='primary' ...

  6. MySQL-----删

    删 **清空数据库内容** delete from 数据库表名; ----清内容,但是自增列的数不清. truncate table 数据库表名; --------自增列的数也清. **清除指定的行数 ...

  7. 在项目中全局添加FastClick导致图片上传插件在ios端失效的解决方案

    ---恢复内容开始--- 项目是移动端的项目,为了解决300ms的click延迟,所以在全局中加入了FastClick,引入的方式很简单,网上一大堆教程,这里不做赘述 我们就谈,我遇到的问题: 某天产 ...

  8. JS判断滚动条是否停止滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 张小龙最新内部演讲:KPI 是副产品,警惕复杂流程

    张小龙最新内部演讲:KPI 是副产品,警惕复杂流程 各位 WXG(微信事业群)的同事们,大家早上好!又到我们一年一度的领导力大会. 大家都看到,我们微信团队膨胀还是比较快的,有 1500 多人了.对此 ...

  10. Python接口测试之对MySQL的操作(六)

    本文章主要来说python对mysql数据库的基本操作,当然,前提是已经搭建了python环境和搭建了Mysql 数据库的环境,python操作mysql数据库提供了MySQLdb库,下载的地址为: ...