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 }