
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5124
就是有n条在x轴的线段,给你线段的左右端点,每条线段都会覆盖点,求出最多被覆盖多少次;
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
#define N 201000 int b[N], v[N]; struct node
{
int L, R;
}a[N]; int main()
{
int T, n;
scanf("%d", &T);
while(T--)
{
memset(a, , sizeof(a));
memset(b, , sizeof(b));
memset(v, , sizeof(v));
int k=, Max=, ans=;
scanf("%d", &n);
for(int i=; i<n; i++)
{
scanf("%d %d", &a[i].L, &a[i].R);
b[k++]=a[i].L;
b[k++]=a[i].R;
}///离散化处理; sort(b, b+k);
k = unique(b, b+k)-b;///排序去重; for(int i=; i<n; i++)
{
int L=lower_bound(b, b+k, a[i].L)-b;
int R=lower_bound(b, b+k, a[i].R)-b;
v[L]++;///相当于是入点++出点--;最后把v从前到后加在一起就相当于此点被加过几次;
v[R+]--;
} for(int i=; i<k; i++)
{
ans+=v[i];
Max=max(Max, ans);///求最大的值;
}
printf("%d\n", Max);
}
return ;
}