题目链接:Train Seats Reservation
思路:按时间点排序,用vis数组存静上车人数(可能是负),注意去重点。
顺序遍历所有的时间点,计算车上人数的变化,得到过程中的最大值。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<cmath>
#include<map>
#include<set>
#include<cstdlib>
#define mem(a,b) memset(a,b,sizeof(a))
#define INF 0x7fffffff
typedef long long ll;
using namespace std;
const int maxn = 1010;
ll arr[maxn*2];
ll vis[110];
int main(){
ll s,t,k;
int n;
while(~scanf("%d",&n)){
if(n == 0){
puts("*");
break;
}
ll ans = 0;
int m = 0;
memset(arr,0,sizeof(arr));
memset(vis,0,sizeof(vis));
for(int i = 0; i < n; i++){
scanf("%lld%lld%lld",&s,&t,&k);
arr[m++] = s;
arr[m++] = t;
vis[s] += k;
vis[t] += -k;
}
sort(arr,arr+m);
int kind = 1;
for(int i = 1; i < m; i++){
if(arr[i] != arr[i-1]) arr[kind++] = arr[i];
}
ll tmp = 0;
for(int i = 0; i < kind; i++){
tmp += vis[arr[i]];
ans = max(ans,tmp);
}
printf("%lld\n",ans);
}
return 0;
}