由于脑洞的序列不会改变,考虑用线段树维护区间内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;
}

  

转载于:https://www.cnblogs.com/yangjiyuan/p/5519945.html

【bzoj4592】[Shoi2015]脑洞治疗仪相关推荐

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

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

  2. bzoj4592[SHOI2015]脑洞治疗仪

    题目链接 BZOJ 洛谷 解析 3.20 正解是线段树,但是今天没时间写了,先挖个坑qwq,暂时就写个\(ODT\) upd 3.21 (没有咕的)线段树解法 操作0:区间赋值 操作1:查询区间和,区 ...

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

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

  4. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  5. 马斯克脑洞破解谁是“中本聪”?

    大家好,又是美好的一天! 昨天在网上看到特斯拉老板Elon Musk的一条推,真的是脑洞大呀!分享出来,大家一起看看! 图中列出了4家公司,分别为:韩国的三星.日本的东芝.日本的中道(做音响的)以及美 ...

  6. [SHOI2015]自动刷题机

    [SHOI2015]自动刷题机 题目描述 曾经发明了信号增幅仪的发明家 SHTSC 又公开了他的新发明:自动刷题机--一种可以自动 AC 题目的神秘装置. 自动刷题机刷题的方式非常简单:首先会瞬间得出 ...

  7. 截图如何能截到鼠标?脑洞小方法

    有时会突然发现截图软件截出的图竟然没有光标,而此时你迫切的想要一张包含光标的截图,肿么办? 方法一:手机拍照 当然拍出的效果没有截图截的正或整齐,而且环境不好拍出的图也不清晰. 方法二:没有光标没关系 ...

  8. PHP基础班初学心得:脑洞实验-JS变量存储函数与return的一些问题

    本人刚参加PHP基础班培训第一天,由于之前毫无基础,分享的心得可能不规范,方法也许也"旁门左道",不能保证质量,只作自己总结学习,也希望能帮助到同样是初学者的朋友们,共同进步. 在 ...

  9. 脑洞一下 | 产品经理是如何用一张小票推算店面房租的?

    写在前面的话:小编当时在社区脑洞里看到这个题目时,内心也是崩溃的~尼玛这也能算出来!那小编爆照产品经理岂不是连生辰八字星座血型也能算出来?还好大家算出来的答案五花八门,目测产品经理这个物种还没有达到能 ...

最新文章

  1. Python机器学习——DBSCAN聚类
  2. 逆向分析c++ vector向量
  3. c语言是函数式原型的编程,编程范式|程序世界里的编程范式,探索编程本质
  4. kcbzps oracle_快速进行Oracle安装及配置
  5. C++代码片段(一)萃取函数返回值类型,参数类型,参数个数
  6. sql 链接到oracle数据库,通过MSSQL连接服务器连接至Oracle数据库
  7. python输入数据pyqt5_python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例...
  8. Jmeter+Ant+Jenkins接口自动化持续集成环境搭建(Linux)
  9. NOIP练习赛题目6
  10. 很想去摆地摊,可是不知道怎么开始,前期需要做什么准备工作吗?
  11. 批量注册windows下的动态库
  12. Ubuntu14.04下安装Samba
  13. c语言上机实验报告河南理工大学,河南理工大学单片机实验报告格式.doc
  14. SourceTree 删除记住的账户
  15. 关于运行npm install报[..................] / idealTree:WEB-48403: sill idealTree buildDeps的问题
  16. iOS文章 - 收藏集 - 掘金
  17. 如何有效的清理c盘文件?真实有效
  18. 多线程调用ch.ethz.ssh2.Connection执行shell任务时有的执行丢失情况解决
  19. 数据库 之创建新用户
  20. 颜色直方图, HSV直方图, histogram bins

热门文章

  1. k8s组件说明:api server
  2. MySQL连接相关问题(查看及设置连接数)
  3. sublime text常用快捷键及多行光标批量操作教程
  4. 【SSM整合案例】静态资源和分页标签的添加
  5. in作为介词的用法_英文论文写作:极易混淆的短语用法汇总如下
  6. 下载python需要注意什么_用户在对Python下载的时候,这些注意事项不能忽视
  7. js加版本号 webpack_webpack脚手架增加版本号
  8. Qt 实现钢笔画线效果详细原理
  9. python函数的返回值是返回引用吗_python-函数(上):函数返回值、函数调用、前向引用...
  10. 共享内存 传一个类指针_共享内存介绍:Shared Memory