func_code_string: #include <bits/stdc++.h>   using namespace std;   int n;   pair<int, int> s[300100];   pair<int, int> r[300100];   int res[300300];   int s1[300300];   int r1[300300];   map<pair<int, int>, int> rep;   int dp[94040];   void add(int a, int b, int x, int l = 1, int h = 1e4 + 2, int p = 1) {     if (a == l && b == h) {       dp[p] += x;       return;     }     int m = (l + h) / 2;     if (b <= m) {       add(a, b, x, l, m, 2 * p);     } else if (a > m) {       add(a, b, x, m + 1, h, 2 * p + 1);     } else {       add(m + 1, b, x, m + 1, h, 2 * p + 1);       add(a, m, x, l, m, 2 * p);     }     dp[p] = dp[2 * p] + dp[2 * p + 1];   }   int cal(int a, int b, int x = 0, int l = 1, int h = 1e4 + 2, int p = 1) {     if (a == l && b == h) {       return dp[p];     }     int m = (l + h) / 2;     if (b <= m) {       return cal(a, b, x, l, m, 2 * p);     } else if (a > m) {       return cal(a, b, x, m + 1, h, 2 * p + 1);     } else {       return cal(m + 1, b, x, m + 1, h, 2 * p + 1) + cal(a, m, x, l, m, 2 * p);     }   }   map<pair<int, int>, int> ch;   int main() {     cin >> n;     for (int i = 1; i <= n; i++) {       scanf( %d , &s[i].first);       scanf( %d , &r[i].first);       r[i].second = i;       s[i].second = i;       rep[make_pair(s[i].first, r[i].first)]++;       s1[i] = s[i].first;       r1[i] = r[i].first;     }     sort(s + 1, s + n + 1);     for (int i = 1; i <= n;) {       int j;       for (j = i; j <= n; j++) {         if (s[i].first != s[j].first) break;         int in = s[j].second;         res[in] += i - 1;         if (r[in].first - 1 >= 1) res[in] -= cal(1, r[in].first - 1);       }       for (int k = i; k < j; k++) {         int in = s[k].second;         add(r[in].first, r[in].first, 1);       }       i = j;     }     sort(r + 1, r + n + 1);     for (int i = 1; i <= n;) {       int j;       for (j = i; j <= n; j++) {         if (r[i].first != r[j].first) break;         int in = r[j].second;         res[in] += i - 1;       }       i = j;     }     vector<pair<long long, long long> > v;     for (int i = 1; i <= n; i++) {       if (res[i] == n - rep[make_pair(s1[i], r1[i])] &&           !ch.count(make_pair(s1[i], r1[i]))) {         ch[make_pair(s1[i], r1[i])] = 1;         v.push_back(make_pair(s1[i], r1[i]));       }     }     sort(v.begin(), v.end());     reverse(v.begin(), v.end());     ch[v[0]]++;     if (v.size() > 1) ch[v.back()]++;     int m;     double t;     for (int i = 1; i < v.size() - 1; i++) {       double bef = -1e18;       int l = i + 1, r = v.size() - 1;       while (l <= r) {         m = (l + r) / 2;         t = 1.0 * (1.0 * v[m].second - v[i].second) /             (v[m].second * v[i].second) / (1.0 * v[i].first - v[m].first) *             (1.0 * v[i].first * v[m].first);         if (l == r) {           bef = max(bef, t);           break;         }         m++;         double t1 = 1.0 * (1.0 * v[m].second - v[i].second) /                     (v[m].second * v[i].second) /                     (1.0 * v[i].first - v[m].first) *                     (1.0 * v[i].first * v[m].first);         if (t >= t1) {           r = m - 2;           bef = max(bef, t);         } else {           l = m + 1;           bef = max(bef, t1);         }       }       m = i + 1;       t = 1.0 * (1.0 * v[m].second - v[i].second) / (v[m].second * v[i].second) /           (1.0 * v[i].first - v[m].first) * (1.0 * v[i].first * v[m].first);       bef = max(bef, t);       m = v.size() - 1;       t = 1.0 * (1.0 * v[m].second - v[i].second) / (v[m].second * v[i].second) /           (1.0 * v[i].first - v[m].first) * (1.0 * v[i].first * v[m].first);       bef = max(bef, t);       double aft = 1e18;       l = 0, r = i - 1;       while (l <= r) {         int m = (l + r) / 2;         t = 1.0 * (1.0 * v[m].second - v[i].second) /             (v[m].second * v[i].second) / (1.0 * v[i].first - v[m].first) *             (1.0 * v[i].first * v[m].first);         if (l == r) {           aft = min(aft, t);           break;         }         m++;         double t1 = 1.0 * (1.0 * v[m].second - v[i].second) /                     (v[m].second * v[i].second) /                     (1.0 * v[i].first - v[m].first) *                     (1.0 * v[i].first * v[m].first);         if (t <= t1) {           r = m - 2;           aft = min(aft, t);         } else {           l = m + 1;           aft = min(aft, t1);         }       }       m = 0;       t = 1.0 * (1.0 * v[m].second - v[i].second) / (v[m].second * v[i].second) /           (1.0 * v[i].first - v[m].first) * (1.0 * v[i].first * v[m].first);       aft = min(aft, t);       m = i - 1;       t = 1.0 * (1.0 * v[m].second - v[i].second) / (v[m].second * v[i].second) /           (1.0 * v[i].first - v[m].first) * (1.0 * v[i].first * v[m].first);       aft = min(aft, t);       if (aft >= bef) {         ch[v[i]]++;       }     }     for (int i = 1; i <= n; i++) {       if (ch[make_pair(s1[i], r1[i])] == 2) printf( %d  , i);     }     cout << endl;     return 0;   }   