func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Node {     int id, k;   };   const int N = 2e5 + 10;   int a[N];   int C[N];   Node b[N];   int n;   int lowbit(int x) { return (x & -x); }   int sum(int x) {     int ret = 0;     while (x > 0) {       ret += C[x];       x -= lowbit(x);     }     return ret;   }   void add(int x, int d) {     while (x <= n) {       C[x] += d;       x += lowbit(x);     }   }   bool cmp(const Node& x, const Node& y) {     if (x.k == y.k) return x.id < y.id;     return x.k < y.k;   }   int main() {     long long tot;     int p;     scanf( %d , &n);     memset(C, 0, sizeof(C));     for (int i = 1; i <= n; i++) scanf( %d , &a[i]);     if (n == 1) {       printf( 0 n );       return 0;     }     for (int i = 2; i <= n; i++) {       b[i].k = min(a[i], i - 1);       b[i].id = i;     }     sort(b + 2, b + n + 1, cmp);     p = 2;     tot = 0;     for (int i = 1; i <= n; i++) {       if (a[i] > i) {         add(i + 1, 1);         add(min(a[i], n) + 1, -1);       }       while (p <= n && b[p].k == i) {         tot += sum(b[p].id);         p++;       }       if (p > n) break;     }     printf( %I64d n , tot);     return 0;   }   