Problem Description:
GDUFE-GAME完美结束,按照惯例,会有一篇报道,描述活动期间的盛况,因此相关人员找到负责统计的ASDF,但是ASDF只知道第i个人在S_i时进场,在E_i时离开。为了体现活动的盛大,报道中需要用到某一时刻处在活动现场的人数(这个数当然越大越好),但由于人数太多,ASDF实在是数不过来。如果你帮ASDF完成这个任务,他会请你吃传说中的黯然销魂翅。
Output:
输出某一时刻同时在现场的人数最大值。
Sample Input:
4
1 3 5 7
2 8 6 8
Sample Output:
2
解题思路:差分思想:进场时间点加1,离场时间点减1,然后累加求前缀和即为每个时间点出现的人数,同时更新该时间点在场的最多人数。
AC代码:
1 #include<bits/stdc++.h>
2 using namespace std;
3 int e,n,num,sum,cnt[100010];//差分数组
4 int main(){
5 while(cin>>n){
6 memset(cnt,0,sizeof(cnt));sum=num=0;
7 for(int i=0;i<n;++i)cin>>e,++cnt[e];//进场的时间点加1
8 for(int i=0;i<n;++i)cin>>e,--cnt[e];//离场的时间点减1
9 for(int i=0;i<=100000;++i)sum+=cnt[i],num=max(num,sum);//更新每个时间点的最多人数
10 cout<<num<<endl;
11 }
12 return 0;
13 }