Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define fr first
- #define sc second
- #define mk make_pair
- using namespace std;
- int n, ab[2000001], p[2000001], dp[200000], sz = 4;
- struct st{
- int v, l, r, sum;
- };
- st t[1000001];
- int get(int tl, int tr, int l, int r, int v) {
- if(l > r)
- return 0;
- if(tr == r && tl == l) {
- return t[v].sum;
- }else {
- int tm = (tr + tl) >> 1;
- return max(get(tl, tm, l, min(tm, r), t[v].l), get(tm + 1, tr, max(l, tm + 1), r, t[v].r));
- }
- }
- void goin(int tl, int tr, int x, int k, int v) {
- if(tr == tl)
- t[v].sum = max(k, t[v].sum);
- else {
- int tm = (tr + tl) >> 1;
- if(x <= tm) {
- if(t[v].l == 0)
- t[v].l = sz++;
- goin(tl, tm, x, k, t[v].l);
- }else {
- if(t[v].r == 0)
- t[v].r = sz++;
- goin(tm + 1, tr, x, k, t[v].r);
- }
- t[v].sum = max(t[t[v].l].sum, t[t[v].r].sum);
- }
- }
- int N = 1e9 + 1e5;
- int main() {
- t[1].l = 2;
- t[1].r = 3;
- cin >> n;
- for(int i = 1; i <= n; i++)
- cin >> ab[i], ab[i] += n - i, dp[i] = 0;
- int ans = 0;
- for(int i = n; i >= 1; i--) {
- int k = get(1, N, ab[i], N, 1) + 1;
- // cout << k << endl;
- ans = max(ans, k);
- goin(1, N, ab[i], k, 1);
- }
- cout << n - ans << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement