hdu 1050

实际上是求最大重叠区间,而最大重叠区间必定包括一个区间的端点

为所有的区间端点附上权值,左端点为1,右端点为-1

对于每一个端点设置一个值p=左边所有端点(包括自身)权值之和

那么p值最大的端点为最大重叠区间包含的点,p为重叠层数

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 struct node
 4 {
 5     int p;
 6     int w;
 7 }nodes[500];
 8 int cmp(const void *a,const void *b)
 9 {
10     node x=*(node *)a;
11     node y=*(node *)b;
12     return x.p-y .p;
13 }
14 int main()
15 {
16     int n;
17     scanf("%d",&n);
18     for(int i=0;i<n;i++)
19     {
20         int m;
21         scanf("%d",&m);
22         int a,b;
23         for(int j=0;j<m;j++)
24         {
25             scanf("%d%d",&a,&b);
26             if(a%2==0)
27                 a--;
28             if(b%2==0)
29                 b--;
30             if(a>b)
31             {
32                 int tmp=a;
33                 a=b;
34                 b=tmp;
35             }
36             nodes[2*j].p=a;nodes[2*j].w=1;
37             nodes[2*j+1].p=b;nodes[2*j+1].w=-1;
38         }
39         qsort(nodes,2*m,sizeof(node),cmp);
40         int max=0;
41         int sum=0;
42         for(int j=0;j<2*m;j++)
43         {
44             sum=sum+nodes[j].w;
45             nodes[j].w=sum;
46             if(max<nodes[j].w)
47                 max=nodes[j].w;
48         }
49         printf("%d\n",max*10);
50     }
51     return 0;
52 }

 

posted @ 2013-01-29 10:15  zerojetlag  阅读(205)  评论(0编辑  收藏  举报