OR161. 火车站台
描述
在Z省,有若干个个城市坐落在一条直线上,从左到右依次标号1,2,3,…,其中每个城市有一个火车站点,现今已经开放了n条火车路线,第i条火车路线是从第Yi个城市到第Xi个城市,因为Z省地势奇特,标号小的城市地势较低,所以火车是从高往低开的,再通过神秘力量传送回高地,即Yi一定大于Xi,它在沿途的所有城市都会停靠(显然不包括起点Yi,但是包括终点Xi),火车停靠就需要火车站台来运营维护。火车站台随着运营线路的数量不同,其损耗速度、维护成本也各异,现在我们想知道所有站台中,所运营的线路数最大是多少。
输入描述
第一行一个数n。(1≤n≤100000)输出描述
共一行,一个非负整数,表示最大运营路线数。示例1
输入:
4 4 7 2 6 2 5 1 2
输出:
3
C++ 解法, 执行用时: 16ms, 内存消耗: 784KB, 提交时间: 2020-10-31
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 1; int f[N]; int main() { ios::sync_with_stdio(false);cin.tie(0); int n; cin >> n; int x, y, xlimit = 0; for (int i = 0; i < n; ++i) { cin >> x >> y; xlimit = max(xlimit,y); f[x]++; f[y]--; } int maxi = 0, sum = 0; for (int i = 1; i <= xlimit; ++i) { sum += f[i]; maxi = max(maxi, sum); } cout << maxi << endl; }
C++ 解法, 执行用时: 16ms, 内存消耗: 880KB, 提交时间: 2020-12-23
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 1; int f[N]; int main() { ios::sync_with_stdio(false);cin.tie(0); int n; cin >> n; int x, y, xlimit = 0; for (int i = 0; i < n; ++i) { cin >> x >> y; xlimit = max(xlimit,y); f[x]++; f[y]--; } int maxi = 0, sum = 0; for (int i = 1; i <= xlimit; ++i) { sum += f[i]; maxi = max(maxi, sum); } cout << maxi << endl; }