LibreOJ #2037. 「SHOI2015」脑洞治疗仪
线段树区间合并问题
恶心。。。
#include <cstdio>
#define N 200005 struct Segment
{
int l,r,mid,sum,lm,rm,m,len,flag;
Segment * ch[];
Segment ()
{
ch[]=ch[]=NULL;
lm=rm=m=;
flag=-;
}
}*root=new Segment;
int n,m,tmp,ans,nowl;
inline int max(int a,int b) {return a>b?a:b;}
inline void pushdown(Segment *&k)
{
if(k->flag!=-)
{
k->ch[]->flag=k->ch[]->flag=k->flag;
k->ch[]->sum=k->ch[]->len*k->flag;
k->ch[]->sum=k->ch[]->len*k->flag;
if(k->flag==) k->ch[]->lm=k->ch[]->rm=k->ch[]->m=k->ch[]->len,k->ch[]->lm=k->ch[]->rm=k->ch[]->m=k->ch[]->len;
else k->ch[]->lm=k->ch[]->rm=k->ch[]->m=k->ch[]->lm=k->ch[]->rm=k->ch[]->m=;
k->flag=-;
}
}
inline void pushup(Segment *&k)
{
k->sum=k->ch[]->sum+k->ch[]->sum;
if(!k->ch[]->sum) k->lm=k->ch[]->lm+k->ch[]->lm;
else k->lm=k->ch[]->lm;
if(!k->ch[]->sum) k->rm=k->ch[]->rm+k->ch[]->rm;
else k->rm=k->ch[]->rm;
k->m=max(max(k->ch[]->m,k->ch[]->m),k->ch[]->rm+k->ch[]->lm);
}
void build(Segment * &k,int l,int r)
{
k=new Segment;
k->l=l;
k->r=r;
k->len=r-l+;
if(l==r) {return;}
k->mid=(l+r)>>;
build(k->ch[],l,k->mid);
build(k->ch[],k->mid+,r);
pushup(k);
}
void change_to_nd(Segment *&k,int l,int r)
{
if(l<=k->l&&k->r<=r)
{
k->sum=;
k->flag=;
k->lm=k->rm=k->len;
return;
}
pushdown(k);
if(l<=k->mid) change_to_nd(k->ch[],l,r);
if(r>k->mid) change_to_nd(k->ch[],l,r);
pushup(k);
}
void change_to_nzz(Segment *&k,int l,int r)
{
if(!tmp)
return;
if(l<=k->l&&k->r<=r&&tmp>=k->len-k->sum)
{
tmp-=k->len-k->sum;
k->flag=;
k->m=k->lm=k->rm=;
k->sum=k->len;
return;
}
pushdown(k);
if(l<=k->mid) change_to_nzz(k->ch[],l,r);
if(r>k->mid) change_to_nzz(k->ch[],l,r);
pushup(k);
}
int ask(Segment *&k,int l,int r)
{
if(k->l==l&&k->r==r) return k->sum;
pushdown(k);
if(l>k->mid) return ask(k->ch[],l,r);
else if(r<=k->mid) return ask(k->ch[],l,r);
else return ask(k->ch[],l,k->mid)+ask(k->ch[],k->mid+,r);
}
void query(Segment *&k,int l,int r)
{
if(l<=k->l&&k->r<=r)
{
ans=max(ans,k->m);
ans=max(ans,nowl+k->lm);
if(k->rm==k->len) nowl+=k->len;
else nowl=k->rm;
return;
}
pushdown(k);
if(l<=k->mid) query(k->ch[],l,r);
if(r>k->mid) query(k->ch[],l,r);
}
int Main()
{
scanf("%d%d",&n,&m);
build(root,,n);
root->sum=root->len;
root->flag=;
for(int opt,l,r,L,R;m--;)
{
scanf("%d%d%d",&opt,&l,&r);
if(!opt) change_to_nd(root,l,r);
else if(opt==)
{
scanf("%d%d",&L,&R);
tmp=ask(root,l,r);
change_to_nd(root,l,r);
change_to_nzz(root,L,R);
}
else nowl=,ans=,query(root,l,r),printf("%d\n",ans);
}
return ;
}
int sb=Main();
int main(int argc,char *argv[]) {;}
LibreOJ #2037. 「SHOI2015」脑洞治疗仪的更多相关文章
- loj #2037. 「SHOI2015」脑洞治疗仪
#2037. 「SHOI2015」脑洞治疗仪 题目描述 曾经发明了自动刷题机的发明家 SHTSC 又公开了他的新发明:脑洞治疗仪——一种可以治疗他因为发明而日益增大的脑洞的神秘装置. 为了简单起见 ...
- 【LOJ】#2037. 「SHOI2015」脑洞治疗仪
题解 维护区间内1的个数,左边数0的长度,右边数0的长度,区间内0区间最长个数,覆盖标记 第一种操作区间覆盖0 第二种操作查询\([l_0,r_0]\)中1的个数,区间覆盖0,然后覆盖时找到相对应的区 ...
- LibreOJ #2036. 「SHOI2015」自动刷题机
#2036. 「SHOI2015」自动刷题机 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 题目描述 曾经发明了信号增幅仪的发明家 SHTSC 又公开 ...
- loj#2038. 「SHOI2015」超能粒子炮・改
题目链接 loj#2038. 「SHOI2015」超能粒子炮・改 题解 卢卡斯定理 之后对于%p分类 剩下的是个子问题递归 n,k小于p的S可以预处理,C可以卢卡斯算 代码 #include<c ...
- [LOJ 2039] 「SHOI2015」激光发生器
[LOJ 2039] 「SHOI2015」激光发生器 链接 链接 题解 分为两个部分 第一个是求直线之间的交点找到第一个触碰到的镜面 第二个是求直线经过镜面反射之后的出射光线 第一个很好做,第二个就是 ...
- 「SHOI2015」超能粒子炮・改
「SHOI2015」超能粒子炮・改 给你\(T\)组询问,每组询问给定参数\(n,k\),计算\(\sum\limits_{i=0}^k\dbinom{n}{i}\). \(T\leq10^5,n,k ...
- LibreOJ 2003. 「SDOI2017」新生舞会 基础01分数规划 最大权匹配
#2003. 「SDOI2017」新生舞会 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配
#2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- 【SHOI2015】脑洞治疗仪(恶心的线段树,区间最大子段和)
题目描述: 曾经发明了自动刷题机的发明家 SHTSC 又公开了他的新发明:脑洞治疗仪——一种可以治疗他因为发明而日益增大的脑洞的神秘装置. 为了简单起见,我们将大脑视作一个 01 序列.11代表这个位 ...
随机推荐
- 《精通Spring4.X企业应用开发实战》读后感第五章(注入参数详解)
- FZU 2059 MM (并查集+排序插入)
Problem 2059 MM Accept: 109 Submit: 484Time Limit: 1000 mSec Memory Limit : 32768 KB Problem ...
- CI框架中,扩展验证码类。
使用CI框架的朋友,应该都知道CI框架的的验证码辅助函数,不太好用.它需要写入到数据库中,然后再进行比对. 大家在实际项目中,好像不会这样去使用,因为会对数据库造成一定的压力. 所以,我们还是利用se ...
- HTML5学习笔记(二)新元素和功能
<canvas> 新元素(必须使用脚本来绘制图形) 标签 描述 <canvas> 标签定义图形,比如图表和其他图像.该标签基于 JavaScript 的绘图 API HTML5 ...
- spring boot 启动报:Composite-id class must implement Serializable: xxx错误
问题 在对spring boot项目进行修改后,重新启动时报如下错误: Composite-id class must implement Serializable: xxx xxx为具体的类 原因 ...
- opencv多版本安装
使用命令查看当前的opencv版本: pkg-config --modversion opencv 自带的是opencv-2.4.9 安装opencv3.1 安装opencv的依赖项 sudo apt ...
- 洛谷P2759 奇怪的函数
P2759 奇怪的函数 题目描述 使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少? 输入输出格式 输入格式: 一个正整数 n 输出格式: 使得 x^x 达到 n 位数字的最小正整数 x ...
- Glassfish Cannot run program "/usr/libexec/StartupItemContext; error=2 , No such file or directory
临时处理办法 http://sohu.io/questions/3833214/jvm-failed-to-start-java-io-ioexception-cannot-run-program-u ...
- thinkphp5使用前置后置操作
下面举个例子,前置删除的例子 模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的 控制器中实例化类 $cate=model('cate'); $cate-> ...
- Django ORM 事务操作
事务 把一些列的操作(步骤)当作一个事务 全部的步骤都成功才成功 经典例子:银行转账 代码实现: import os if name == 'main': os.environ.setdefault( ...