线段树区间合并问题

恶心。。。

屠龙宝刀点击就送

#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」脑洞治疗仪的更多相关文章

  1. loj #2037. 「SHOI2015」脑洞治疗仪

    #2037. 「SHOI2015」脑洞治疗仪   题目描述 曾经发明了自动刷题机的发明家 SHTSC 又公开了他的新发明:脑洞治疗仪——一种可以治疗他因为发明而日益增大的脑洞的神秘装置. 为了简单起见 ...

  2. 【LOJ】#2037. 「SHOI2015」脑洞治疗仪

    题解 维护区间内1的个数,左边数0的长度,右边数0的长度,区间内0区间最长个数,覆盖标记 第一种操作区间覆盖0 第二种操作查询\([l_0,r_0]\)中1的个数,区间覆盖0,然后覆盖时找到相对应的区 ...

  3. LibreOJ #2036. 「SHOI2015」自动刷题机

    #2036. 「SHOI2015」自动刷题机 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 题目描述 曾经发明了信号增幅仪的发明家 SHTSC 又公开 ...

  4. loj#2038. 「SHOI2015」超能粒子炮・改

    题目链接 loj#2038. 「SHOI2015」超能粒子炮・改 题解 卢卡斯定理 之后对于%p分类 剩下的是个子问题递归 n,k小于p的S可以预处理,C可以卢卡斯算 代码 #include<c ...

  5. [LOJ 2039] 「SHOI2015」激光发生器

    [LOJ 2039] 「SHOI2015」激光发生器 链接 链接 题解 分为两个部分 第一个是求直线之间的交点找到第一个触碰到的镜面 第二个是求直线经过镜面反射之后的出射光线 第一个很好做,第二个就是 ...

  6. 「SHOI2015」超能粒子炮・改

    「SHOI2015」超能粒子炮・改 给你\(T\)组询问,每组询问给定参数\(n,k\),计算\(\sum\limits_{i=0}^k\dbinom{n}{i}\). \(T\leq10^5,n,k ...

  7. LibreOJ 2003. 「SDOI2017」新生舞会 基础01分数规划 最大权匹配

    #2003. 「SDOI2017」新生舞会 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  8. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

    #2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

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

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

随机推荐

  1. Struts&nbsp;result&nbsp;param详细设置

    <</span>result type="json"> <</span>param name="root">da ...

  2. HDU - 1546 ZOJ - 2750 Idiomatic Phrases Game 成语接龙SPFA+map

    Idiomatic Phrases Game Tom is playing a game called Idiomatic Phrases Game. An idiom consists of sev ...

  3. CentOS7 环境下MySQL5.7 PHP7的安装

    用的都是最新版的包 : php7 mysql5.7 nginx1.8  zabbix3.2.6 替换源为阿里云的源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/ ...

  4. <!--[if !IE]> 的用法

    除IE外都可识别

  5. 3dmax导出缩放

    参考 http://blog.dou.li/unity3d-import-3dmax-model-scale.html http://blog.csdn.net/pdw_jsp/article/det ...

  6. bzoj 2535: [Noi2010]Plane 航空管制2【拓扑排序+堆】

    有个容易混的概念就是第一问的答案不是k[i]字典序最小即可,是要求k[i]大的尽量靠后,因为这里前面选的时候是对后面有影响的(比如两条链a->b c->d,ka=4,kb=2,kc=3,k ...

  7. String,StringBuffer和StringBuilder

    String,StringBuffer和StringBuilder分别应该在什么情况下使用? String 是Java的字符串类,其实质上也是用Char类型存储的,但是除了hash属性,其他的属性都声 ...

  8. docker安装及概述

    相关快捷键 退出:Ctrl-D or exit detach:Ctrl-P + Ctrl-Q Docker 核心技术 1.Namespace — 实现Container的进程.网络.消息.文件系统和主 ...

  9. snipaste截图软件

  10. Corn Fields(模板)

    题目链接 #include <stdio.h> #include <algorithm> #include <string.h> #include <iost ...