其实就是找一个点,使覆盖的线段最多。
经典差分,注意需要离散化
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
int n;
struct aa
{
int l,r;
}q[50005];
int h[100005];
int add[100005],ji[100005];
int main()
{
scanf("%d",&n);
int tot=0;
for (int i=1;i<=n;i++)
scanf("%d%d",&q[i].l,&q[i].r),h[++tot]=q[i].l,h[++tot]=q[i].r;
sort(h+1,h+tot+1);
tot=unique(h+1,h+tot+1)-h-1;
for (int i=1;i<=n;i++)
{
int l=lower_bound(h+1,h+tot+1,q[i].l)-h;
int r=lower_bound(h+1,h+tot+1,q[i].r)-h;
add[l]++;
ji[r]++;
}
int now=0,ans=0;
for (int i=1;i<=tot;i++)
{
now+=add[i];
if (now>ans) ans=now;
now-=ji[i];
}
printf("%d",ans);
return 0;
}
总结
1:差分是一个非常重要的思想