Advertisement
Guest User

Untitled

a guest
Dec 13th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define fr first
  4. #define sc second
  5. #define mk make_pair
  6.  
  7. using namespace std;
  8.  
  9. int n, ab[2000001], p[2000001], dp[200000], sz = 4;
  10.  
  11. struct st{
  12. int v, l, r, sum;
  13. };
  14.  
  15. st t[1000001];
  16.  
  17. int get(int tl, int tr, int l, int r, int v) {
  18. if(l > r)
  19. return 0;
  20. if(tr == r && tl == l) {
  21. return t[v].sum;
  22. }else {
  23. int tm = (tr + tl) >> 1;
  24. return max(get(tl, tm, l, min(tm, r), t[v].l), get(tm + 1, tr, max(l, tm + 1), r, t[v].r));
  25. }
  26. }
  27.  
  28. void goin(int tl, int tr, int x, int k, int v) {
  29. if(tr == tl)
  30. t[v].sum = max(k, t[v].sum);
  31. else {
  32. int tm = (tr + tl) >> 1;
  33. if(x <= tm) {
  34. if(t[v].l == 0)
  35. t[v].l = sz++;
  36. goin(tl, tm, x, k, t[v].l);
  37. }else {
  38. if(t[v].r == 0)
  39. t[v].r = sz++;
  40. goin(tm + 1, tr, x, k, t[v].r);
  41. }
  42. t[v].sum = max(t[t[v].l].sum, t[t[v].r].sum);
  43. }
  44. }
  45.  
  46. int N = 1e9 + 1e5;
  47.  
  48. int main() {
  49. t[1].l = 2;
  50. t[1].r = 3;
  51. cin >> n;
  52. for(int i = 1; i <= n; i++)
  53. cin >> ab[i], ab[i] += n - i, dp[i] = 0;
  54.  
  55. int ans = 0;
  56. for(int i = n; i >= 1; i--) {
  57. int k = get(1, N, ab[i], N, 1) + 1;
  58. // cout << k << endl;
  59. ans = max(ans, k);
  60. goin(1, N, ab[i], k, 1);
  61. }
  62.  
  63. cout << n - ans << endl;
  64. return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement