题目链接
思路:如果按第二种方式建的话答案很容易想到是lr/2,那如果是第一种方式呢?我们可以先按左端点进行排序,由于左端点肯定是递增的,那么对于当前点i,它的最大矩形面积就是a【i】.l(min(1-i-1的最大右端点,a【i】.r)。
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+1;
typedef long long ll;
struct node{
ll l,r;
}s[maxn];
bool cmp(const node &a,const node &b)
{
return a.l==b.l?a.r<b.r:a.l<b.l;
}
int main()
{
int n,k;
ll ans=0;
scanf("%d",&n);
for(int i=1;i<=n;++i){
ll l,r;
scanf("%lld %lld",&l,&r);
if(l>r) swap(l,r);
s[i].l=l,s[i].r=r;
ans=max(ans,l*r);
}
sort(s+1,s+1+n,cmp);
ll maxx=s[n].r;
for(int i=n-1;i>=1;--i)
{
ans=max(ans,s[i].l*min(maxx,s[i].r)*2);
maxx=max(maxx,s[i].r);
}
if(ans%2) printf("%lld.5\n",ans/2);
else printf("%lld.0\n",ans/2);
}