题目描述

Farmer John has opened a swimming pool for his cows, figuring it will help them relax and produce more milk.

To ensure safety, he hires NN cows as lifeguards, each of which has a shift that covers some contiguous interval of time during the day. For simplicity, the pool is open from time t=0t=0 until time t = 1,000,000,000t=1,000,000,000 on a daily basis, so each shift can be described by two integers, giving the time at which a cow starts and ends her shift. For example, a lifeguard starting at time t = 4t=4 and ending at time t = 7t=7 covers three units of time (note that the endpoints are "points" in time).

Unfortunately, Farmer John hired 1 more lifeguard than he has the funds to support. Given that he must fire exactly one lifeguard, what is the maximum amount of time that can still be covered by the shifts of the remaining lifeguards? An interval of time is covered if at least one lifeguard is present.

输入格式

The first line of input contains NN (1 \leq N \leq 100,0001≤N≤100,000). Each of the next NN lines describes a lifeguard in terms of two integers in the range 0 \ldots 1,000,000,0000…1,000,000,000, giving the starting and ending point of a lifeguard's shift. All such endpoints are distinct. Shifts of different lifeguards might overlap.

输出格式

Please write a single number, giving the maximum amount of time that can still be covered if Farmer John fires 1 lifeguard.

题意翻译

FJ为他的奶牛们建造了一个游泳池,FJ认为这将有助于他们放松身心以及生产更多牛奶。

为了确保奶牛们的安全,FJ雇佣了N头牛,作为泳池的救生员,每一个救生员在一天内都会有一定的事情,并且这些事情都会覆盖一天内的一段时间。为了简单起见,泳池从时间t=0时开门,直到时间t=1000000000关门,所以每个事情都可以用两个整数来描述,给出奶牛救生员开始以及结束事情的时间。例如,一个救生员在时间t=4时开始事情并且在时间t=7时结束事情,那么这件事情就覆盖了3个单位时间。(注意:结束时间是“点”的时间)

不幸的是,FJ多雇佣了一名的救生员,但他没有足够的资金来雇佣这些救生员。因此他必须解雇一名救生员,求可以覆盖剩余救生员的轮班时间的最大总量是多少?如果当时至少有一名救生员的事情已经开始,则这个时段被覆盖。

输入格式

输入的第一行包括一个整数N(1≤N≤100000)。接下来N行中,每行告诉了我们一个救生员在0~10000000000范围内的开始以及结束时间。所有的结束时间都是不同的。不同的救生员的事情覆盖的时间可能会重叠。

输出格式

如果FJ解雇一名救生员仍能覆盖的最大时间。

感谢@Shan_Xian 提供的翻译

输入输出样例

输入 #1复制

3
5 9
1 4
3 7

输出 #1复制

7

上代码:

#include <bits/stdc++.h>
using namespace std;
int n,ans,sp,m=100000000;
struct tim
{int l;int r;
}a[100010];//建立结构体,方便记录起始时间点和结束时间点
int cmp(tim x,tim y)
{return x.l<y.l;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d",&a[i].l,&a[i].r);sort(a+1,a+n+1,cmp);//按起始点排序for(int i=1;i<=n;i++){if(a[i].r>sp)//原来记录覆盖点的末点小于当前工作结束点{int u=max(sp,a[i].l);//若sp大则意为新输入的这段线段的初始点在原已覆盖所有点之内//若a[i].l大则意为新输入的这段线段的初始点在原覆盖线段末点之外ans+=a[i].r-u;//加入新覆盖线段的长度sp=a[i].r;//更新覆盖线段末点}}sp=0;//一定要记得初始化!!!a[n+1].l=a[n].r;//建立边界,防止溢出for(int i=1;i<=n;i++)//求出线段对总覆盖线段的最小作用{if(a[i].r<=sp)//如果此线段的末点在总覆盖线段之内,即无作用m=0;else{int z=min(a[i+1].l,a[i].r)-max(a[i].l,sp);//配合代码下方的图理解m=min(m,z);//求出最小作用段sp=max(a[i].r,sp);//更新末端点,不断缩小查找范围}}m=max(0,m);//m不能为负数printf("%d",ans-m);//用总线段减去最小的作用段后,即可求出解雇一名救生员后最大的覆盖时间return 0;
}

洛谷P4188 Lifeguards S相关推荐

  1. 洛谷 P4188 [USACO18JAN]Lifeguards (线段树)

    Problem 给 nnn 个区间,请你删去一个区间,问剩下区间并集最长为多少 Solution 线段树维护区间覆盖长度- 然后每次删去一个区间看剩下的并集长度,再加上那个这个区间- 注意: 线段树求 ...

  2. [USACO18JAN]Lifeguards P 洛谷黑题,单调队列优化DP

    传送门:戳我 这道题有两个版本,S和P,S是K等于1的情况,显然可以用线段树水过. P版本就难了很多,洛谷黑题(NOI/NOI+/CTSC),嘿嘿. 我自己也不是很理解,照着题解写了一遍,然后悟到了一 ...

  3. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  4. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  5. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  6. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

  7. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

  8. 洛谷P1417 烹调方案

    洛谷P1417 烹调方案 如果是一般的01背包的话 选的先后是没关系的 但是这题选的先后是有关系的,因为他的价值是随着时间而变化的, 而你的01背包是做不到先选2再选1的 那么我们就跟国王游戏一样 用 ...

  9. 记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )

    昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了... 洛谷P318 ...

最新文章

  1. 英特尔、高通争战物联网芯片 下个霸主会是谁
  2. java newline_Java BufferedWriter.newLine()方法示例
  3. python人工智能-Python在人工智能中的作用
  4. 64位linux下was宕机,was7经常自动宕机,前方告急,工程师面临崩溃.小弟跪上
  5. C基础--字符串操作函数(strlen,strcpy,strcmp,strcat,strstr,strtok,strchr)
  6. C#程序出现内存溢出错误的解决办法
  7. 怀旧服新开服务器最新,暴雪官方发大招,怀旧服新开11个新服务器
  8. 【字符串反转总结】Java中七种方法实现
  9. 剖析 Promise 之基础篇
  10. jQuery:掌握选择器
  11. (42)根据时钟关系分类时钟
  12. 安装更新Lenovo Solution Center更新失败!具体问题看内容!要是等官方技术人员解决,估计要等上好一段时间!...
  13. NLTK学习笔记(六):利用机器学习进行文本分类
  14. node.js室内装修风格选择系统毕业设计-附源码211552
  15. Android简单登录界面布局设计
  16. 网站速度这样优化,让你的网站飞起来
  17. 2015年维多利亚的秘密新晋十位天使
  18. 在ubuntu用wine安装微信 并解决无法输入文字的问题 ubuntu完美安装微信
  19. Nginx报错 nginx: [error] invalid PID number ““ in “/usr/local/nginx/logs/nginx.pid“
  20. InfiniBand RDMA

热门文章

  1. NetBpm 示例:请假审批(6)
  2. [css] css 3d 动画,跟随鼠标移动做球形旋转
  3. 没有学历学了JAVA怎么找份工作_自学java没学历可以找到工作嘛?
  4. 大数据存储技术期末复习(自用)
  5. 信用卡3D验证相关资料
  6. OpenCV开发笔记(四十七):红胖子8分钟带你深入了解直方图(图文并茂+浅显易懂+程序源码)
  7. SQL面试练习题一(基础)
  8. 详解Nginx的核心原理
  9. 开启这些隐藏功能,让你的Chrome更加强大
  10. mac 安装qemu的方法