题目描述
黄学长的N个妹子要喝水,每个妹子用水杯喝水的时间从A时刻开始到B时刻结束。
求黄学长最少需要多少个水杯缓解妹子们的饥渴。输入
输入第一行一个数N,接下来N行每行一对数(A,B)。
输出
输出一行一个数表示答案。
样例输入
样例数据
5
1 10
2 4
3 6
5 8
4 7
样例输出
4
提示
对于10%的数据,有1≤N≤10
对于100%的数据,由于黄学长的后宫实在太多,有1≤N≤2000000,0≤A,B≤15000000
本题输入文件不超过35M,建议开启输入优化。
思路:
我也不知道这是什么思路,也许是从原来做过的题目中得到的灵感吧,对每一个区间的开始标记为1,结束时间点标记为-1,扫描数组,记录扫描过程中的最大值。还用到了输入优化(百度的)。
#include<queue>
#include<cstring>
#include<iostream>
#include<cstdio>
#include<vector>
#include<set>
using namespace std;
const int maxn=15000000+10;
int L,R,cnt,ans,a[maxn];
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int main()
{
int n,x,y;
n=read();
for(int i=0;i<n;i++)
{
L=read();
R=read();
a[L]++;
a[R+1]--;
}
int t=0;
for(int i=0;i<=maxn;i++)
{
t+=a[i];
ans=max(ans,t);
}
printf("%d",ans);
return 0;
}