------监狱栅栏------ • 11小时前
#include <iostream>
#include<algorithm>
using namespace std;
struct eq {
int left;
int right;
}info[100001];
bool oo(eq e1, eq e2) {
if (e1.right == e2.right) {
return e1.left < e2.left;
}
return e1.right < e2.right;
}
int dp[100001];
int main() {
int n, a, b, cnt;
cin >> n;
cnt = n;
for (int i = 1; i <= cnt; i++) {
cin >> a >> b;
info[i].left = a + 1;
info[i].right = n - b;
if (info[i].left > info[i].right) {
cnt--;
i--;
}
}
sort(info + 1, info + cnt + 1, oo);
for (int i = 2, last = 1; i <= cnt; i++) {
if (info[i].left != info[i - 1].left || info[i].right != info[i - 1].right) {
dp[info[i - 1].right] = max(dp[info[i - 1].right], dp[info[i-1].left - 1] + i - last);
last = i;
}
if (info[i].right == info[i].right) {
for (int j = info[i-1].right + 1; j <= info[i].right; j++)dp[j] = dp[j - 1];
}
if (i == cnt) {
dp[info[i].right] = max(dp[info[i].right], dp[info[i].left - 1] + i - last + 1);
for (int j = info[i].right + 1; j <= n; j++)dp[j] = dp[j - 1];
}
}
if (cnt <= 1) cout << cnt;
else cout << n - dp[n];
return 0;
}
评论:
请先登录,才能进行评论