func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 3 + 2e5;   int root[N], ls[N << 5], rs[N << 5], id;   int sum[N << 5];   int n, q, p[N];   void update(int &u, int v, int l, int r, int p) {     sum[u = ++id] = sum[v] + 1;     if (l == r) return;     int mid = l + r >> 1;     if (p <= mid)       rs[u] = rs[v], update(ls[u], ls[v], l, mid, p);     else       ls[u] = ls[v], update(rs[u], rs[v], mid + 1, r, p);   }   int query(int u, int v, int l, int r, int L, int R) {     if (L <= l && r <= R) return sum[v] - sum[u];     int ans = 0, mid = l + r >> 1;     if (L <= mid) ans = query(ls[u], ls[v], l, mid, L, R);     if (R > mid) ans += query(rs[u], rs[v], mid + 1, r, L, R);     return ans;   }   int query(int d, int u, int l, int r) {     if (l > r || u < d) return 0;     return query(root[l - 1], root[r], 1, n, d, u);   }   int main() {     int l, d, r, u;     scanf( %d%d , &n, &q);     for (int i = 1; i <= n; ++i) {       scanf( %d , p + i);       update(root[i], root[i - 1], 1, n, p[i]);     }     while (q--) {       scanf( %d%d%d%d , &l, &d, &r, &u);       long long a1 = query(u + 1, n, 1, l - 1);       long long a2 = query(u + 1, n, l, r);       long long a3 = query(u + 1, n, r + 1, n);       long long a4 = query(d, u, 1, l - 1);       long long a5 = query(d, u, l, r);       long long a6 = query(d, u, r + 1, n);       long long a7 = query(1, d - 1, 1, l - 1);       long long a8 = query(1, d - 1, l, r);       long long a9 = query(1, d - 1, r + 1, n);       long long ans = 0;       ans = a1 * (a5 + a6 + a8 + a9);       ans += a2 * (a4 + a5 + a6 + a7 + a8 + a9);       ans += a3 * (a4 + a5 + a7 + a8);       ans += a4 * (a5 + a6 + a8 + a9);       ans += a5 * (a6 + a7 + a8 + a9);       ans += a6 * (a7 + a8);       ans += a5 * (a5 - 1) / 2;       printf( %lld n , ans);     }     return 0;   }   