HDOJ 2478 Slides

2014-11-24 11:34:37 · 作者: · 浏览: 0


维护次大和最大的左下角和右上角的坐标,再枚举抽出哪一个矩阵。。。

Slides

Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 923 Accepted Submission(s): 311


Problem Description There are N slides lying on the table. Each of them is transparent and formed as a rectangle. In a traditional problem, one may have to calculate the intersecting area of these N slides. The definition of intersection area is such area which belongs to all of the slides.
But this time I want to take out some one of the N slides, so that the intersecting area of the left N-1 slides should be maximal. Tell me the maximum answer.

Input The first line of the input contains a single integer T, the number of test cases, followed by the input data for each test case. The first line of each test case contains a single integer N (1 <= N <= 100000), the number of rectangles. Followed by N lines, each line contains four integers x1, y1, x2, y2 (-10000 <= x1 < x2 <= 10000, -10000 <= y1 < y2 <= 10000), pair (x1, y1) gives out the bottom-left corner and pair (x2, y2) gives out the top-right corner of the rectangle.
Output There should be one line per test case containing the maximum intersecting area of corresponding N-1 slides.
Sample Input
2
2
0 0 2 2
1 1 2 2
3
0 0 2 2
1 0 3 2
1 1 3 3

Sample Output
4
2

Source 2008 Asia Regional Chengdu
#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; const int INF=0x3f3f3f3f; int n; int Lx1,Lx2,Ly1,Ly2,Rx1,Rx2,Ry1,Ry2; struct Point { int x,y; }p[2][120000]; int main() { int T_T; scanf("%d",&T_T); while(T_T--) { scanf("%d",&n); Lx1=Lx2=Ly1=Ly2=-INF; Rx1=Rx2=Ry1=Ry2=INF; for(int i=0;i
      
       Lx1) { Lx2=Lx1; Lx1=a; } else if(a>Lx2) { Lx2=a; } if(b>Ly1) { Ly2=Ly1; Ly1=b; } else if(b>Ly2) { Ly2=b; } if(c
       
        LY&&RX>LX) ans=max(ans,(RY-LY)*(RX-LX)); } printf("%d\n",ans); } return 0; }