Problem

给 nnn 个区间,请你删去一个区间,问剩下区间并集最长为多少

Solution

线段树维护区间覆盖长度…
然后每次删去一个区间看剩下的并集长度,再加上那个这个区间…

注意:

  • 线段树求区间长度,要把区间定义为左闭右开,这样好做
  • 只会插入线段,删去原有线段,因此不需要下放标记什么的
  • updateupdateupdate 时要判断此节点是不是被完全覆盖,而不能直接用左加右。因为没有下放标记,所以左右只表示有无线段,如果直接用左儿子+右儿子,会漏一部分
  • 删边时,要判断这段区间被完全覆盖的是不是没有了,没有在通过左加右得到这段区间的结果

Code

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100010
struct node{int x,y;}a[N];
int n,num=0,ans=0,b[N<<1];
struct Node{int len,cnt,x;}tree[N<<3];
inline void update(int v){if(tree[v].cnt) return;tree[v].x=tree[v<<1].x+tree[v<<1|1].x;
}
void build(int v,int l,int r){if(l==r){tree[v].len=b[l+1]-b[l];return;}int mid=l+r>>1;build(v<<1,l,mid);build(v<<1|1,mid+1,r);tree[v].len=tree[v<<1].len+tree[v<<1|1].len;
}
void ins(int v,int l,int r,int x,int y){if(x<=l && r<=y){tree[v].cnt++;tree[v].x=tree[v].len;return;}int mid=l+r>>1;if(x<=mid) ins(v<<1,l,mid,x,y);if(mid<y) ins(v<<1|1,mid+1,r,x,y);update(v);
}
void del(int v,int l,int r,int x,int y){if(x<=l && r<=y){tree[v].cnt--;if(!tree[v].cnt){if(l==r) tree[v].x=0;else update(v);}return;}int mid=l+r>>1;if(x<=mid) del(v<<1,l,mid,x,y);if(mid<y) del(v<<1|1,mid+1,r,x,y);update(v);
}
int main(){freopen("a.in","r",stdin); scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y),b[++num]=a[i].x,b[++num]=a[i].y;sort(b+1,b+num+1);num=unique(b+1,b+num+1)-b-1;build(1,1,num-1);for(int i=1;i<=n;i++){a[i].x=lower_bound(b+1,b+num+1,a[i].x)-b;a[i].y=lower_bound(b+1,b+num+1,a[i].y)-b;ins(1,1,num-1,a[i].x,a[i].y-1);}for(int i=1;i<=n;i++){del(1,1,num-1,a[i].x,a[i].y-1);ans=max(ans,tree[1].x);ins(1,1,num-1,a[i].x,a[i].y-1);}printf("%d\n",ans);return 0;
}

洛谷 P4188 [USACO18JAN]Lifeguards (线段树)相关推荐

  1. 洛谷(P3373)线段树加乘混合模板

    题目链接:P3373 [模板]线段树 2 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这道题目的意思很明确,就是要我们在线完成区间的乘和加运算并支持查询区间和的一个问题.处理这道 ...

  2. 洛谷 P3960 列队【线段树】

    用动态开点线段树分别维护每一行和最后一列,线段树的作用是记录被选的点的个数以及查询第k个没被选的点,每次修改,从行里标记被选的点,从最后一列标记向左看齐之后少的点,然后用vector维护行列的新增点 ...

  3. 【洛谷P1816 忠诚】线段树

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...

  4. 洛谷P3919可持久化线段树

    P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目提供者HansBug 站长团 评测方式云端评测 标签O2优化高性能 难度提高+/省选- 时空限制3000ms / 512MB 有了可持久 ...

  5. 洛谷2023-维护序列-线段树-两个lazy的相互作用

    题目描述: 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的 ...

  6. 洛谷OJ U552 守墓人 线段树模板题

    题目描述 Description 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然... ...

  7. 洛谷 P3384 【模板】树链剖分-树链剖分(点权)(路径节点更新、路径求和、子树节点更新、子树求和)模板-备注结合一下以前写的题目,懒得写很详细的注释...

    P3384 [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节 ...

  8. 洛谷P4315 月下“毛景树” 题解

    洛谷P4315 月下"毛景树" 题解 题目链接:P4315 月下"毛景树" 题意:请维护一个数据结构,支持 改第 kkk 条边的边权 结点 uuu 到 vvv ...

  9. 洛谷——P1047 校门外的树 python实现

    洛谷--P1047 校门外的树 python实现 l, m = map(int, input().split(' ')) trees = [True]*(l+1) for i in range(m): ...

最新文章

  1. Dorado7功能及技术特点
  2. 关于epel源的配置
  3. 百度大脑金秋九月CV盛典,人脸识别新产品及伙伴计划发布会压轴开启
  4. yii mailer 扩展发送邮件
  5. 彩色MT9V034摄像头 Bayer转rgb FPGA实现(转载)
  6. kubernetes的安装
  7. Linux 系统的启动顺序
  8. 静态网页托管_视频教程:如何在IPFS上托管网站!
  9. web(七)---fastcgi再进阶(请求和响应)官方例子
  10. 申请了:苹果已经在测试“毫米波”5G技术
  11. (七) UVC框架分析
  12. HDU1465 不容易系列之一【递推】
  13. 阿里云爬虫风险管理产品商业化,为云端流量保驾护航 1
  14. win10cmd重置系统_win10命令行恢复出厂设置
  15. win10计算机历史记录,教你win10如何查看电脑开机历史记录
  16. android中如何如何让dailog横屏显示
  17. 亲自动手从源码 构建 Groovy 2.3.8 发布包
  18. 程序员必读: 摸清Hash表的脾性
  19. 养不起真猫,就用代码吸猫-Unity粒子实现画猫咪
  20. 2022年中国工业互联网安全大赛北京市选拔赛暨全国线上预选赛MISC-工控文件Writeup

热门文章

  1. Android Studio 画笔功能绘制简单图形
  2. 如何解决中小企业融资难问题
  3. Manjaro为包管理器pacman和yaourt\yay 添加多线程下载
  4. u3d引擎移动都有哪些方法?又都适用于什么场景?
  5. Ubuntu 22.4网易云音乐启动失败处理方法
  6. C语言time.h中clock()函数的使用
  7. 忠实通物流信息管理系统
  8. 中蜂几月份自然分蜂_中蜂养殖,如何给蜜蜂分蜂?时间是关键
  9. ogg19.1.0.0.4打补丁
  10. 文件夹快速隐藏,文件夹选项中勾选隐藏目录依旧不能使其显示