func_code_string: #include <bits/stdc++.h>   using namespace std;   struct node {     long long l, r;     int now;     vector<pair<int, int> > v;   } st[250005 * 4];   int pi, ri, n, N;   int p[250005], m[250005];   long long r, sp[250005];   pair<long long, int> d[250005];   queue<int> q;   vector<long long> rr;   bool vis[250005];   void init(int id, int l, int r) {     if (l == r) {       st[id].l = rr[l - 1] + 1;       st[id].r = rr[l];       int L = lower_bound(d + 2, d + n + 2, make_pair(rr[l - 1] + 1, 0)) - d;       int R = upper_bound(d + 2, d + n + 2, make_pair(rr[l], 1000000000)) - d;       for (int i = L; i < R; i++) {         st[id].v.push_back(make_pair(m[d[i].second], d[i].second));       }       sort(st[id].v.begin(), st[id].v.end());       return;     }     int mid = l + r >> 1;     init(id * 2, l, mid);     init(id * 2 + 1, mid + 1, r);     st[id].l = st[id * 2].l;     st[id].r = st[id * 2 + 1].r;     st[id].v.insert(st[id].v.begin(), st[id * 2].v.begin(), st[id * 2].v.end());     st[id].v.insert(st[id].v.end(), st[id * 2 + 1].v.begin(),                     st[id * 2 + 1].v.end());     sort(st[id].v.begin(), st[id].v.end());   }   void query(int id, int l, int r, long long L, long long R, int p) {     if (R < st[id].l || st[id].r < L) return;     if (L <= st[id].l && st[id].r <= R) {       int len = st[id].v.size();       while (st[id].now < len && st[id].v[st[id].now].first <= p) {         if (!vis[st[id].v[st[id].now].second])           q.push(st[id].v[st[id].now].second);         vis[st[id].v[st[id].now].second] = 1;         st[id].now++;       }       return;     }     int mid = l + r >> 1;     query(id * 2, l, mid, L, R, p);     query(id * 2 + 1, mid + 1, r, L, R, p);   }   int main() {     long long x, y, xi, yi;     scanf( %I64d%I64d%d%I64d%d , &xi, &yi, &p[1], &r, &n);     r *= r;     sp[1] = r;     rr.push_back(r);     for (int i = 2; i <= n + 1; i++) {       scanf( %I64d%I64d%d%d%I64d , &x, &y, &m[i], &p[i], &r);       x -= xi;       y -= yi;       d[i].first = x * x + y * y;       d[i].second = i;       r *= r;       sp[i] = r;       rr.push_back(r);     }     rr.push_back(0);     sort(rr.begin(), rr.end());     rr.resize(unique(rr.begin(), rr.end()) - rr.begin());     N = rr.size() - 1;     sort(d + 2, d + n + 2);     init(1, 1, N);     q.push(1);     while (!q.empty()) {       int now = q.front();       q.pop();       query(1, 1, N, 1, sp[now], p[now]);     }     int cnt = 0;     for (int i = 2; i <= n + 1; i++) {       if (vis[i]) {         cnt++;       }     }     printf( %d n , cnt);   }   