首页 > 代码库 > hdu 5124 lines

hdu 5124 lines

http://acm.hdu.edu.cn/showproblem.php?pid=5124

题意:给你n条线段,然后找出一个被最多条线段覆盖的点,输出覆盖这个点的线段的条数。

思路:可以把一条线段分出两个端点离散化,左端点被标记为-1,右端点被标记为1,然后排序,如果遇到标记为-1,cnt++,否则cnt--;找出cnt的最大值。

 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn 200010 5 using namespace std; 6  7 struct node 8 { 9     int x,c;10     bool operator<(const node &a)const11     {12         return (x<a.x)||(x==a.x&&c<a.c);13     }14 }p[maxn];15 16 int t;17 int n;18 19 int main()20 {21     scanf("%d",&t);22     while(t--)23     {24         scanf("%d",&n);25         for(int i=0; i<n; i++)26         {27             int s,e;28             scanf("%d%d",&s,&e);29             p[i*2].x=s;30             p[i*2].c=-1;31             p[i*2+1].x=e;32             p[i*2+1].c=1;33         }34         sort(p,p+2*n);35         int cnt=0; int ans=0;36         for(int i=0; i<2*n; i++)37         {38             if(p[i].c==-1)39             {40                 cnt++;41             }42             else43                 cnt--;44             ans=max(ans,cnt);45         }46         printf("%d\n",ans);47     }48     return 0;49 }
View Code

 

hdu 5124 lines