← 返回题目页

T0122 楼顶

标程

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m;
    cin >> n >> m;
    vector<pair<int, int>> e(m);
    for (int i = 0; i < m; i++) cin >> e[i].first >> e[i].second;
    sort(e.begin(), e.end());

    int reach = 1;   // 当前能到达的最高楼层
    int idx = 0;     // 下一部尚未处理的电梯
    int rides = 0;   // 已乘坐电梯的次数
    while (reach < n) {
        int best = reach;
        while (idx < m && e[idx].first <= reach) {
            best = max(best, e[idx].second);
            idx++;
        }
        if (best == reach) break;   // 没有能让人继续上楼的电梯
        reach = best;
        rides++;
    }

    if (reach >= n) cout << rides << '\n';
    else cout << -1 << '\n';
    return 0;
}

动画演示