93求助
错误样例11
代码:
#include<bits/stdc++.h>
#define re register
#define rep(i,a,b) for (re int i=(a);i<=(b);i++)
#define drep(i,a,b) for (re int i=(a);i>=(b);i--)
using namespace std;
const int N=5e3+7;
struct Cow{
int x,y;
inline bool operator < (const Cow &rhs) const {
if (x!=rhs.x)return x<rhs.x;
return y<rhs.y;
}
}a[N];
int L,W,n;
inline bool cmp(Cow a,Cow b){
return a.y<b.y;
}
inline int read(){
re int x=0,f=1;char ch=getchar();
while (ch<'0' || ch>'9'){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*f;
}
int main(){
L=read(),W=read(),n=read();
rep(i,1,n)a[i].x=read(),a[i].y=read();
a[++n].x=0;a[n].y=0;
a[++n].x=L;a[n].y=0;
a[++n].x=0;a[n].y=W;
a[++n].x=L;a[n].y=W;
sort(a+1,a+n+1);
int res=0;
rep(i,1,n){
re int h=W,l=0,v=L-a[i].x;
rep(j,i+1,n)if (a[j].y<=h && a[j].y>=l){
if (v*(h-l)<=res)break;
res=max(res,(a[j].x-a[i].x)*(h-l));
if (a[j].y==a[i].y)break;
if (a[j].y>a[i].y)h=min(h,a[j].y);
else l=max(l,a[j].y);
}
h=W,l=0,v=a[i].x;
drep(j,i-1,1)
if (a[j].y<=h && a[j].y>=l){
if (v*(h-l)<=res)break;
res=max(res,(a[i].x-a[j].x)*(h-l));
if (a[i].y==a[j].y)break;
if (a[j].y>a[i].y)h=min(h,a[j].y);
else l=max(l,a[j].y);
}
}
sort(a+1,a+n+1,cmp);
rep(i,1,n-1)res=max(res,(a[i+1].y-a[i].y)*L);
printf("%d",res);
return 0;
}