func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, t;   pair<int, int> a[300005];   int b[300005];   int force(int ll, int rr) {     int r = 0;     for (int i = 1; i <= n; i++)       if (a[i].first >= ll && a[i].second <= rr) r++;     return r;   }   struct indexed_tree_2d {     vector<int> T[1000006];     void set(int first, int second) {       for (int i = first; i < 1000006; i += i & -i) T[i].push_back(second);     }     void end_update() {       for (int i = 1; i < 1000006; i++) sort(T[i].begin(), T[i].end());     }     int get(int first, int second) {       int r = 0;       for (int i = first; i >= 1; i -= i & -i)         r += upper_bound(T[i].begin(), T[i].end(), second) - T[i].begin();       return r;     }     int get(int x1, int y1, int x2, int y2) {       return get(x2, y2) - get(x1 - 1, y2) - get(x2, y1 - 1) +              get(x1 - 1, y1 - 1);     }   } tr;   int f(int ll, int rr) {     if (ll > rr) return 0;     return tr.get(ll, ll, rr, rr);   }   int main() {     scanf( %d%d , &n, &t);     for (int i = 1; i <= n; i++) {       scanf( %d%d , &a[i].first, &a[i].second);     }     for (int i = 1; i <= n; i++) tr.set(a[i].first, a[i].second);     tr.end_update();     for (int i = 1; i <= t; i++) {       int answer = n;       scanf( %d , &m);       for (int j = 1; j <= m; j++) {         scanf( %d , &b[j]);       }       sort(b + 1, b + m + 1);       b[m + 1] = 1000006;       for (int j = 1; j <= m + 1; j++) answer -= f(b[j - 1] + 1, b[j] - 1);       printf( %d n , answer);     }   }   