列表

详情


OR161. 火车站台

描述

Z省,有若干个个城市坐落在一条直线上,从左到右依次标号1,2,3,…,其中每个城市有一个火车站点,现今已经开放了n条火车路线,第i条火车路线是从第Yi个城市到第Xi个城市,因为Z省地势奇特,标号小的城市地势较低,所以火车是从高往低开的,再通过神秘力量传送回高地,即Yi一定大于Xi,它在沿途的所有城市都会停靠(显然不包括起点Yi,但是包括终点Xi),火车停靠就需要火车站台来运营维护。火车站台随着运营线路的数量不同,其损耗速度、维护成本也各异,现在我们想知道所有站台中,所运营的线路数最大是多少。

输入描述

第一行一个数n。(1≤n≤100000)

接下来n行每行两个数Xi和Yi,分别代表第i条火车路线的终点和起点。(1≤Xi<Yi≤1e5)

输出描述

共一行,一个非负整数,表示最大运营路线数。

示例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;
}

上一题