对于一个闭区间集合{A1,A2……AK}(K>1,Ai≠Aj{i≠j}),我们定义其权值
其中|X|表示X区间的长度;如果X为空集|X|=0。
当然,如果这些闭区间没有交集则权值为0。
给定N个各不相同的闭区间,请你从中找出若干个(至少2个)区间使其权值最大。
输入
第一行一个整数N (2 <= N <= 105)
接下来N行每行两个整数 l r(1<=l<=r<=106),表示闭区间的两个端点。
输出
最大权值
样例输入
4
1 6
4 8
2 7
3 5
样例输出
24
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct Node
{
int l , r;
}node[100005];
int cmp(const Node &a , const Node &b)
{
if(a.l != b.l)
return a.l < b.l;
else if( a.r != b.r)
return a.r < b.r;
}
long long maxx(long long a , long long b)
{
if(a > b)
return a;
else
return b;
}
int main(void)
{
int i , j , n;
cin >> n;
for(i = 0 ; i < n ; ++i)
{
cin >> node[i].l >> node[i].r;
}
sort(node , node+n , cmp);
long long ans = 0;
for(i = 0 ; i < n - 1 ; ++i)
{
for(j = i + 1 ; j < n ; ++j)
{
if(node[j].l >= node[i].r)
break;
ans = maxx(ans,(long long )(node[j].r-node[i].l)*(node[i].r-node[j].l));
}
}
cout << ans << endl;
return 0;
}