BZOJ4592 线段树

【BZOJ】栅栏-线段树优化DP 蒟蒻做了一天线段树,表示心态炸裂,从未想到线段树还有这么多操作(已狗带)。 传送门:BZOJ3387 题意     Farmer John 为奶牛们设置了一个障碍赛。障碍赛中有n个(n≤50000)各种长度的栅栏,每个都与x轴平行,其中的第i个栅栏的y坐标为i。     终点在坐标原点(0,0),起点在... 阅读详情

这个题有毒 我调了3个小时 各种奇葩错 (还是我太菜了)
这题就线段树维护一个区间1的个数 0的个数 左端最长连续0 右端最长连续0 区间内最长连续0 转移的思路还是很好想的 对于那个补脑洞的操作(明明脑洞越来越多) 二分一下 再区间修改

还是得多码
(我学了假的线段树 常数大到离谱)

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,m;
struct node{
    bool flag,addflag;
    int sum[2],mx,lx,rx,l,r;
    bool operator == (const node&ph) const{
        return l==ph.l&&r==ph.r;
    }
}t[N*4],null;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
void pushdown(int pos,int l,int r){
    int mid=(l+r)>>1;
    t[pos<<1].flag=t[pos<<1|1].flag=t[pos].flag;
    t[pos<<1].addflag=t[pos<<1|1].addflag=1;
    t[pos<<1].sum[0]=mid-l+1,t[pos<<1|1].sum[0]=r-mid,t[pos<<1|1].sum[1]=t[pos<<1].sum[1]=0;
    if(t[pos].flag) swap(t[pos<<1|1].sum[0],t[pos<<1|1].sum[1]),swap(t[pos<<1].sum[0],t[pos<<1].sum[1]);
    t[pos<<1].mx=t[pos<<1].lx=t[pos<<1].rx=t[pos].flag?0:mid-l+1;
    t[pos<<1|1].mx=t[pos<<1|1].lx=t[pos<<1|1].rx=t[pos].flag?0:r-mid;
    t[pos].addflag=0;
}
void update(int pos,int l,int r){
    int mid=(l+r)>>1;
    t[pos].sum[0]=t[pos<<1].sum[0]+t[pos<<1|1].sum[0];
    t[pos].sum[1]=t[pos<<1].sum[1]+t[pos<<1|1].sum[1];
    t[pos].mx=max(max(max(t[pos<<1].lx,t[pos<<1|1].rx),max(t[pos<<1].mx,t[pos<<1|1].mx)),t[pos<<1].rx+t[pos<<1|1].lx);
    t[pos].lx=t[pos<<1].lx==mid-l+1?t[pos<<1].lx+t[pos<<1|1].lx:t[pos<<1].lx;
    t[pos].rx=t[pos<<1|1].rx==r-mid?t[pos<<1].rx+t[pos<<1|1].rx:t[pos<<1|1].rx;
}
void build(int pos,int l,int r){
    t[pos].l=l,t[pos].r=r,t[pos].sum[1]=r-l+1;
    if(l==r) return;
    int mid=(l+r)>>1;
    build(pos<<1,l,mid),build(pos<<1|1,mid+1,r);
} 
void add(int pos,int l,int r,int nl,int nr,int v){
    if(l>nr||r<nl) return;
    if(l>=nl&&r<=nr){
        t[pos].addflag=1;
        t[pos].flag=v;
        t[pos].sum[0]=t[pos].mx=t[pos].lx=t[pos].rx=v?0:r-l+1;
        t[pos].sum[1]=v?r-l+1:0;
        return;
    }
    if(t[pos].addflag)pushdown(pos,l,r);
    int mid=(l+r)>>1;
    add(pos<<1,l,mid,nl,nr,v);add(pos<<1|1,mid+1,r,nl,nr,v);
    update(pos,l,r);
}
int asksum(int pos,int l,int r,int nl,int nr,int v){
    if(l>nr||r<nl) return 0;
    if(l>=nl&&r<=nr) {
        return t[pos].sum[v];
    }
    if(t[pos].addflag)pushdown(pos,l,r);
    int mid=(l+r)>>1;
    return asksum(pos<<1,l,mid,nl,nr,v)+asksum(pos<<1|1,mid+1,r,nl,nr,v);
}
node work(node x,node y){
    node p;
    if(x==null||y==null) return p=x==null?y:x;
    p.mx=max(max(max(x.lx,y.rx),max(x.mx,y.mx)),x.rx+y.lx);
    p.lx=x.lx==x.r-x.l+1?x.lx+y.lx:x.lx;
    p.rx=y.rx==y.r-y.l+1?x.rx+y.rx:y.rx;
    p.l=x.l,p.r=y.r;
    return p;
}
node askmax(int pos,int l,int r,int nl,int nr){
    if(l>nr||r<nl) return null;
    if(l>=nl&&r<=nr) return t[pos];
    if(t[pos].addflag)pushdown(pos,l,r);
    int mid=(l+r)>>1;
    node p=work(askmax(pos<<1,l,mid,nl,nr),askmax(pos<<1|1,mid+1,r,nl,nr));
    return p;
}
int main(){
    n=read(),m=read();
    build(1,1,n);
    for(int i=1,op,x,y;i<=m;i++){
        op=read();
        if(op==0){
            int x=read(),y=read();
            add(1,1,n,x,y,0);
        }
        else if(op==1){
            int l0=read(),r0=read(),l1=read(),r1=read();
            int s1=asksum(1,1,n,l0,r0,1);
            if(s1){
                add(1,1,n,l0,r0,0);
                if(asksum(1,1,n,l1,r1,0)<=s1) add(1,1,n,l1,r1,1);
                else{
                    int l=l1,r=r1;
                    while(l<r){
                        int mid=(l+r)>>1;
                        if(asksum(1,1,n,l1,mid,0)<s1) l=mid+1;
                        else r=mid;
                    }
                    add(1,1,n,l1,r,1);
                }
            }
        }
        else{
            int x=read(),y=read();
            node p=askmax(1,1,n,x,y);
            printf("%d\n",max(max(p.lx,p.rx),p.mx));
        }
    }
}
机器学习 线性回归 头歌实训 第1关:简单线性回归与多元线性回归 第2关:线性回归的正规方程解 第3关:衡量线性回归的性能指标 第4关:scikit-learn线性回归实践 - 波斯顿房价预测 阅读详情

相关推荐

Mask2Former实战:用SwinTransformer+Deformable Attention搞定图像分割三大任务

本文实战解析了Mask2Former模型如何统一解决语义、实例和全景分割三大任务。通过集成Swin Transformer骨干网络与创新的Deformable Attention及Masked Attention机制,详细介绍了模型构建、训练策略及在COCO数据集上的性能表现,为开发者提供了高效的图像分割解决方案。

tech5的博客 246

bzoj 3585 mex - 线段树 - 分块 - 莫队算法

Description   有一个长度为n的数组{a1,a2,...,an}。m次询问,每次询问一个区间内最小没有出现过的自然数。 Input   第一行n,m。  第二行为n个数。  从第三行开始,每行一个询问l,r。 Output   一行一个数,表示每个询问的答案。 Sample Input ...

adx33526的博客 294

【DSP】【工程实战】从零构建C6678多核工程:CCS环境配置与启动模式详解

本文详细介绍了在CCS开发环境中从零构建TMS320C6678多核DSP工程的完整流程。内容涵盖KeyStone架构解析、工程创建、基础代码编写、链接命令文件配置、仿真器调试,并重点深入讲解了包括I2C EEPROM在内的多种一级启动模式原理与配置方法,为开发者提供了一套清晰、可复用的实战指南。

weixin_29164185的博客 418

bzoj2770【线段树】

【代码】bzoj2770【线段树】

willem248的博客 203

LibreNMS实战:5分钟搞定Docker部署与中文配置(附常见问题排查)

本文详细介绍了如何使用Docker在5分钟内快速部署LibreNMS,并完成中文界面优化。从环境准备到容器启动,再到中文语言包安装和系统配置调整,提供了完整的实战指南。同时,文章还包含常见问题排查和性能调优建议,帮助用户高效搭建网络监控系统。

e1f2g的博客 1281

总结:知识图谱KG+大模型LLM

知识图谱KG+大模型LLM

安静的软件工程师 4210

bzoj 4355: Play with sequence (线段树)

题目描述传送门题目大意:维护一个长度为N的序列a,现在有三种操作: 1)给出参数U,V,C,将a[U],a[U+1],…,a[V-1],a[V]都赋值为C。 2)给出参数U,V,C,对于区间[U,V]里的每个数i,将a[i]赋值为max(a[i]+C,0)。 3)给出参数U,V,输出a[U],a[U+1],…,a[V-1],a[V]里值为0的数字个数。题解这道题比较麻烦的就是操作二中的max操

clover_hxy的博客 1266

基于BQ25895RTWR的锂电池充电管理硬件设计

BQ25895 是一款适用于单节锂离子电池和锂聚合物电池的高度集成型 5A 开关模式电池充电管理和系统电源路径管理器件。此类器件支持高输入电压快速充电。低阻抗电源路径对开关模式运行效率进行了优化、缩短了电池充电时间并延长了放电阶段的电池使用寿命。• 移动电源、移动 Wi-Fi 热点。• 便携式互联网器件。

corlin6688的博客 1086

bzoj1593(线段树)

线段树一种新见的询问方式。 1.询问连续长度为x的空的区间的最左端点,并将这段覆盖 (通过最长子序列来做,先判断左边有没有这样的区间,再判断相连接的地方有没有,再判断右边有没有) 2.区间覆盖为空或有    #include #include #include #include #include using namespace std; int n,ans; struc

zhhx2001的博客 842

各大厂薪资对比爬虫:Python采集OfferShow爆料数据

print(f"⚠️ API返回错误码: {data.get('code')}, msg: {data.get('msg')}")ax.set_title('各大厂薪资对比 (基于OfferShow爆料数据)', fontsize=16, fontweight='bold')stats.columns = ['人数', '平均年薪', '年薪中位数', '年薪标准差', '平均月薪', '平均月数']print(analyzer.get_position_stats('字节跳动').head(10))

2201_76125261的博客 603

如何提高电路的抗干扰能力

本内容详细介绍了电源传导干扰处理,包括滤波、Feedthrough电容器、磁环、磁珠、屏蔽的使用与选型,EMC电磁兼容测试项目简介与要求,单片机与电源抗干扰处理等。

让你爱上电路设计 8600

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

【BZOJ4592】[Shoi2015]脑洞治疗仪 Description 曾经发明了自动刷题机的发明家SHTSC又公开了他的新发明:脑洞治疗仪--一种可以治疗他因为发明而日益增大的脑洞的神秘装置。 为了简单起见,我们将大脑视作一个01序列。1代表这个位置的脑组织正常工作,0代表这是一块脑洞。 1 0 1 0 0 0 1 1 1 0 脑洞治疗仪修补某一块脑洞的基本工作原理就...

aodanchui1057的博客 141

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【BZOJ4592】【Shoi2015】脑洞治疗仪 线段树

第一眼看成了一个裸的01弱智线段树,然后发现弱智的是自己。。。主要就是如果好脑洞不够用了就尽量往前面补这一个操作。。。 其实还是不难。。。我们在线段树遍历的时候优先往前面补,如果这个区间不够补就分别检查两个子区间,可以证明这样的操作还是log级别的(反正我不会233),然后就是最长连续区间的套路辣 /***********************************************

鲜衣怒马少年郎 698

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

BZOJ 4592 SHOI2015 脑洞治疗仪 线段树

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4592 题意概述:需要维护一个01序列A,一开始A全部都是1。支持如下操作:   1.将区间[l,r]变成0。   2.将区间[l0,r0]变成0,用其中原来1的个数去填补[l1,r1]中的0,当1的数量过多的时候剩余的1会被丢弃;当1的数量不足的时候从左到右依次填充0。 ...

diezhan7052的博客 199

BZOJ4592: [Shoi2015]脑洞治疗仪

BZOJ4592(吐槽一下dsydsy,我=这个数据=了一天我xxx!!xxx!!)一开始看到这个题。诶,区间连续最大和诶!把脑洞的值为1,正常的赋为−INF-INF 但是操作1怎么办。。 发现就是先统计出l0到r0l0到r0区间内−INF-INF的个数tottot,然后区间赋为1. 然后统计l1到r1l1到r1区间内1的个数TotTot,如果tot>Tottot>Tot就直接区间赋值了嘛。

Heret1c 732

bzoj4592 脑洞治疗仪 线段树

Description曾经发明了自动刷题机的发明家SHTSC又公开了他的新发明:脑洞治疗仪–一种可以治疗他因为发明而日益增大的脑洞的神秘装置。 为了简单起见,我们将大脑视作一个01序列。1代表这个位置的脑组织正常工作,0代表这是一块脑洞。 1 0 1 0 0 0 1 1 1 0 脑洞治疗仪修补某一块脑洞的基本工作原理就是将另一块连续区域挖出,将其中正常工作的

Le Petit Prince 571

【bzoj4592】【SHOI2015】【脑洞治疗仪】【线段树】

Description 曾经发明了自动刷题机的发明家SHTSC又公开了他的新发明:脑洞治疗仪--一种可以治疗他因为发明而日益增大的脑洞的神秘装置。 为了简单起见,我们将大脑视作一个01序列。1代表这个位置的脑组织正常工作,0代表这是一块脑洞。 1 0 1 0 0 0 1 1 1 0 脑洞治疗仪修补某一块脑洞的基本工作原理就是将另一块连续区域挖出,将其中正常工作的脑组织填补在

sunshinezff的专栏 806

BZOJ4592 [Shoi2015]脑洞治疗仪(洛谷P4344)

BZOJ4592: [Shoi2015]脑洞治疗仪(洛谷P4344) 线段树 BZOJ题目传送门 洛谷题目传送门 昨天一个字母打错一晚上没调出来。。。 挺裸的线段树。 0直接做。1记录下l0l0l_0到r0r0r_0的1的个数后可以二分确定修补的右端点,也可以直接往下做到没有为止,前者log2log2\log^2,后者比loglog\log稍微大一点。2对每个节点记一下最左边、最右...

forezxl的博客 321

【bzoj4592】[Shoi2015]脑洞治疗仪 线段树

我还真是傻逼呀,这么傻逼的线段树调那么久。 就是一个1操作,改成在线段树上二分即可。 #include #include #include #include #include #include #define maxn 200010 using namespace std; struct yts { int l,r; int lmx,rmx,ans,size,tag; }t[4

Oxer的专栏 1480

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

4592: [Shoi2015]脑洞治疗仪 Time Limit:20 SecMemory Limit:256 MBSubmit:69Solved:38[Submit][Status][Discuss] Description 曾经发明了自动刷题机的发明家SHTSC又公开了他的新发明:脑洞治疗仪--一种可以治疗他因为发明而日益增大的脑洞的神秘装置。 为了简单起见,我...

weixin_30439131的博客 71

bzoj 4592: [Shoi2015]脑洞治疗仪 线段树

Description 曾经发明了自动刷题机的发明家SHTSC又公开了他的新发明:脑洞治疗仪–一种可以治疗他因为发明而日益增大的脑洞的神秘装置。 为了简单起见,我们将大脑视作一个01序列。1代表这个位置的脑组织正常工作,0代表这是一块脑洞。 1 0 1 0 0 0 1 1 1 0 脑洞治疗仪修补某一块脑洞的基本工作原理就是将另一块连续区域挖出,将其中正常工作的脑组织填补在这块脑洞中。 (所以脑洞治...

liangzihao1的博客 246

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

线段树基础操作题,唯一需要思考下的是将区间的前k个0覆盖为1。 线段树上二分,先递归到左子树覆盖,回溯时返回还剩多少个0未被覆盖,在根据这个信息递归到右子树。注意特判k=0的情况。 要维护的信息有:区间左边最长0连续段,右边最长0连续段,区间整体最长0连续段,区间内1的个数,以及一个记录是否被区间覆盖的懒惰标记。 1 #include<cstdio> 2 #includ...

weixin_30604651的博客 80

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

  考虑需要资瓷哪些操作:区间赋值为0;统计区间1的个数;将区间前k个0变为1;询问区间最长全0子串。于是线段树维护区间1的个数、0的个数、最长前缀后缀全0子串即可。稍微困难的是用一个log实现将区间前k个0变为1,线段树上二分尽量往左边改即可,可以令修改函数返回值为剩余能改的1的个数。 #include<iostream> #include<cstdio> #...

weixin_30552635的博客 149

[BZOJ 4592][Shoi2015]脑洞治疗仪(线段树)

Description 曾经发明了自动刷题机的发明家SHTSC又公开了他的新发明:脑洞治疗仪--一种可以治疗他因为发明而日益增大的脑洞的神秘装置。 为了简单起见,我们将大脑视作一个01序列。1代表这个位置的脑组织正常工作,0代表这是一块脑洞。 1 0 1 0 0 0 1 1 1 0 脑洞治疗仪修补某一块脑洞的基本工作原理就是将另一块连续区域挖出,将其中正常工作的脑组织填补在这块脑洞中。 ...

weixin_34290096的博客 87

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

Description 曾经发明了自动刷题机的发明家SHTSC又公开了他的新发明:脑洞治疗仪--一种可以治疗他因为发明而日益增大的脑洞的神秘装置。 为了简单起见,我们将大脑视作一个01序列。1代表这个位置的脑组织正常工作,0代表这是一块脑洞。 1 0 1 0 0 0 1 1 1 0 脑洞治疗仪修补某一块脑洞的基本工作原理就是将另一块连续区域挖出,将其中正常工作的脑组织填补在这块脑洞中。...

weixin_34107955的博客 96
上一篇: BZOJ1076 状压+期望
下一篇: BZOJ1700 DP
Devil_Gary
博客等级 码龄9年 5粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值