1 条题解

  • 0
    @ 2025-11-3 0:09:35

    C++ :

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    const int oo = 2e9;
    const int N = 1e5 + 5;
    
    int n;
    int x[N], t[N];
    int p[N], f[N];
    int mx;
    
    bool cmp(int a, int b) {
        if (x[a] != x[b]) return x[a] < x[b];
        return t[a] < t[b];
    }
    
    int main() {
        scanf("%d", &n);
        for (int i = 1; i <= n; ++i) {
            scanf("%d%d", &x[i], &t[i]);
            t[i] -= x[i];
            p[i] = i;
            f[i] = oo;
        }
        sort(p + 1, p + n + 1, cmp);
        mx = 0;
        f[0] = 0;
        for (int i = 1; i <= n; ++i) {
            int l = 0, r = mx;
            int v = t[p[i]];
            if (v < 0) continue;
            while (l < r) {
                int mid = (l + r) / 2 + 1;
                if (v < f[mid])
                    r = mid - 1;
                else
                    l = mid;
            }
            mx = max(mx, r + 1);
            f[r + 1] = v;
        }
        printf("%d\n", mx);
        return 0;
    }
    
    • 1

    信息

    ID
    5633
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    递交数
    1
    已通过
    0
    上传者