天天看點

hdu2478 Slides

預處理。
           
#include<cstdio>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;

const int inf=0x7fffffff;
const int maxn=100005;

int x1[maxn],x2[maxn],y1[maxn],y2[maxn];

void insertmin(int a[2],int x)
{
	if(x<a[0])swap(x,a[0]);
	if(x<a[1])swap(x,a[1]);
}

void insertmax(int a[2],int x)
{
	if(x>a[0])swap(x,a[0]);
	if(x>a[1])swap(x,a[1]);
}

int exclude(int a[2],int x)
{
	if(a[0]!=x)return a[0];
	return a[1];
}
int main()
{
int casen;
scanf("%d",&casen);
while(casen--)
{
	int left[2]={-inf,-inf};
	int right[2]={inf,inf};
	int bottom[2]={-inf,-inf};
	int top[2]={inf,inf};
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d%d%d%d",&x1[i],&y1[i],&x2[i],&y2[i]);
		insertmax(left,x1[i]);
		insertmin(right,x2[i]);
		insertmax(bottom,y1[i]);
		insertmin(top,y2[i]);
	}
	if(n==1)
	{
		printf("0\n");
	}
	else
	{
		int ret=0;
		for(int i=0;i<n;i++)
		{
		int dx=exclude(right,x2[i])-exclude(left,x1[i]);
		if(dx<0)
		dx=0;
		int dy=exclude(top,y2[i])-exclude(bottom,y1[i]);
		if(dy<0)
		dy=0;
		ret=max(ret,dx*dy);
	}
			printf("%d\n",ret);
		}

	}
return 0;
}