http://codeforces.com/contest/1029/problem/C

You are given nn segments on a number line; each endpoint of every segment has integer coordinates. Some segments can degenerate to points. Segments can intersect with each other, be nested in each other or even coincide.

The intersection of a sequence of segments is such a maximal set of points (not necesserily having integer coordinates) that each point lies within every segment from the sequence. If the resulting set isn't empty, then it always forms some continuous segment. The length of the intersection is the length of the resulting segment or 00 in case the intersection is an empty set.

For example, the intersection of segments [1;5][1;5] and [3;10][3;10] is [3;5][3;5] (length 22), the intersection of segments [1;5][1;5] and [5;7][5;7] is [5;5][5;5](length 00) and the intersection of segments [1;5][1;5] and [6;6][6;6] is an empty set (length 00).

Your task is to remove exactly one segment from the given sequence in such a way that the intersection of the remaining (n−1)(n−1)segments has the maximal possible length.

Input

The first line contains a single integer nn (2≤n≤3⋅1052≤n≤3⋅105) — the number of segments in the sequence.

Each of the next nn lines contains two integers lili and riri (0≤li≤ri≤1090≤li≤ri≤109) — the description of the ii-th segment.

Output

Print a single integer — the maximal possible length of the intersection of (n−1)(n−1) remaining segments after you remove exactly one segment from the sequence.

Examples
input

Copy
4
1 3
2 6
0 4
3 3
output

Copy
1
input

Copy
5
2 6
1 3
0 4
1 20
0 4
output

Copy
2
input

Copy
3
4 5
1 2
9 20
output

Copy
0
input

Copy
2
3 10
1 5
output

Copy
7

代码:

#include <bits/stdc++.h>
using namespace std; #define inf 0x3f3f3f3f
const int maxn = 300010 + 10;
int N; struct Node {
int l;
int r;
}S[maxn], Q[maxn], A[maxn]; int main() {
scanf("%d", &N);
S[0].r = inf, S[0].l = -inf;
for(int i = 1; i <= N; i ++) {
scanf("%d%d", &A[i].l, &A[i].r);
S[i].l = max(S[i - 1].l, A[i].l);
S[i].r = min(S[i - 1].r, A[i].r);
} Q[N + 1].r = inf, Q[N + 1].l = -inf;
for(int i = N; i >= 1; i --) {
Q[i].l = max(A[i].l, Q[i + 1].l);
Q[i].r = min(A[i].r, Q[i + 1].r);
} int ans = 0;
for(int i = 1; i <= N; i ++) {
ans = max(ans, (min(Q[i + 1].r, S[i - 1].r) - max(Q[i + 1].l, S[i - 1].l)));
}
printf("%d\n", ans);
return 0;
}

  

最新文章

  1. Office 365常见问题解答(第一期)
  2. play 源码分析
  3. 请问如何查看mysql 的端口号?
  4. Sublime Text3 插件集合
  5. 初试 uTenux
  6. SDL_Test库(1)——SDL不用TTF库绘制文字
  7. .net 配置文件 分析 EntityName 时出错
  8. Handlebars.js 模板引擎
  9. 利用CocoaHTTPServer实现wifi局域网传输文件到iphone
  10. js for in循环遍历对象,获取key:value值
  11. 在Linux下部署mysql时,使用group by碰到的问题
  12. Bicriterial routing 双调路径 HYSBZ - 1375(分层最短路)
  13. Zookeeper学习笔记——2 Shell和Java API的使用
  14. Cocos2d-JS studio基础控件的使用
  15. 销售vs技术岗,做技术的方法思考
  16. 京东轮播图片的静态页面CSS3
  17. asp.net mvc全局异常捕获
  18. 什么是ZooKeeper(一)(通俗易懂)
  19. UVA 1262 Password
  20. Openstack(Kilo)安装系列之Keystone(三)

热门文章

  1. 改Chrome的User Agent,移动版网络
  2. SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)
  3. java并发多线程(摘自网络)
  4. SpringBoot非官方教程 | 第二十五篇:2小时学会springboot
  5. ios数据持久化--CoreData框架的介绍和使用
  6. NPM 学习笔记整理
  7. js、jquery中全局替换replace
  8. Linux文件服务器实战(虚拟用户)
  9. 如何用管理员账户登录windows10
  10. Dialog BLE 学习之 修改分散加载文件 (2)