P2519 [HAOI2011]problem a

Solution

有人比它高, 有人比它低.
那么就确定了和他相等的.
于是每一个人是一个区间.
问题转化为了确定最多的区间且不交.

Code

#include <algorithm>
#include <iostream>
#include <stdio.h>
#include <vector>
#include <map>
using namespace std;
const int N = 100006;

int f[N];
vector<int> p[N];
map<pair<int, int>, int>S;

int main() {
    int n;
    scanf("%d", &n);
    for (int i = 1, l, r; i <= n; i += 1) {
        scanf("%d%d", &l, &r);
        l += 1, r = n - r;
        if (l > r) continue;
        if (not S.count(make_pair(l, r)))
            p[r].push_back(l);
        S[make_pair(l, r)] += 1;
    }
    for (int i = 1; i <= n; i += 1) {
        f[i] = f[i - 1];
        for (auto j : p[i])
            f[i] = max(f[i], f[j - 1] + min(i - j + 1, S[make_pair(j, i)]));
    }
    printf("%d\n", n - f[n]);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/qdscwyy/p/9885155.html