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