func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1e5 + 10;   struct Node {     int is, id, x;     bool operator<(const Node &a) const {       if (x != a.x)         return x < a.x;       else         return is < a.is;     }   };   int a[maxn * 4], s[maxn], p[maxn], inc[maxn], b[maxn], treea[maxn * 4],       treeb[maxn * 4], pb[maxn];   int ans[maxn];   map<int, int> ma;   int cnt = 0, tt = 0;   Node que[maxn * 3];   int getid(int x) {     x = -x;     return ma[x];   }   void add1(int x, int y) {     for (int i = x; i < 4 * maxn; i += (i & -i)) treea[i] += y;   }   void add2(int x, int y) {     for (int i = x; i < 4 * maxn; i += (i & -i)) treeb[i] += -y;   }   int quer1(int x) {     int res = 0;     for (int i = x; i >= 1; i -= (i & -i)) res += treea[i];     return res;   }   int quer2(int x) {     int res = 0;     for (int i = x; i >= 1; i -= (i & -i)) res += treeb[i];     return res;   }   int main() {     int n, m;     scanf( %d %d , &n, &m);     for (int i = 1; i <= n; i++) scanf( %d , &p[i]);     for (int i = 1; i <= n; i++) scanf( %d , &s[i]);     for (int i = 1; i <= n; i++) scanf( %d , &b[i]);     for (int i = 1; i <= m; i++) scanf( %d , &inc[i]);     for (int i = 1; i <= m; i++) scanf( %d , &pb[i]);     for (int i = 1; i <= n; i++) {       a[++cnt] = -(p[i] + b[i] - 1), a[++cnt] = -(b[i] - p[i]);       que[++tt] = Node{0, i, p[i]};       que[++tt] = Node{2, i, s[i]};     }     for (int i = 1; i <= m; i++) {       a[++cnt] = -(inc[i] + pb[i]), a[++cnt] = -(pb[i] - inc[i]);       que[++tt] = Node{1, i, inc[i]};     }     sort(que + 1, que + 1 + tt);     sort(a + 1, a + cnt + 1);     int pz = 1;     for (int i = 1; i <= cnt; i++)       if (ma[a[i]] == 0) ma[a[i]] = pz++;     for (int i = 1; i <= tt; i++) {       Node now = que[i];       if (now.is == 0) {         add1(getid(b[now.id] - p[now.id]), 1);         add2(getid(p[now.id] + b[now.id] - 1), 1);       } else if (now.is == 1) {         ans[now.id] = quer1(getid(pb[now.id] - inc[now.id])) +                       quer2(getid(inc[now.id] + pb[now.id]));       } else if (now.is == 2) {         add1(getid(b[now.id] - p[now.id]), -1);         add2(getid(p[now.id] + b[now.id] - 1), -1);       }     }     for (int i = 1; i <= m; i++) {       printf( %d  , ans[i]);     }     return 0;   }   