func_code_string: #include <bits/stdc++.h>   using namespace std;   pair<long double, long double> A[200666];   int st[200666], ind[200666];   long double val[200666];   bool comp(int i1, int i2) { return A[i1] < A[i2]; }   bool eql(long double v1, long double v2) {     return (v1 - v2 > -((long double)0.00000000000001) &&             v1 - v2 < ((long double)0.00000000000001));   }   long double bs(long double vmax, pair<long double, long double> v1,                  pair<long double, long double> v2) {     long double pos, step;     for (step = 1; step <= vmax; step *= (long double)2.0)       ;     for (pos = 0; step > ((long double)0.0000000000000000001);          step /= (long double)2.0)       if (pos + step <= vmax) {         long double val_1 = 1.0 / v1.first + (pos + step) / (v1.second);         long double val_2 = 1.0 / v2.first + (pos + step) / (v2.second);         if (val_2 < val_1 || eql(val_2, val_1)) pos += step;       }     return pos;   }   int main() {     int n, i;     scanf( %d , &n);     for (i = 1; i <= n; ++i) {       int v1, v2;       scanf( %d%d , &v1, &v2);       A[i].first = v1;       A[i].second = v2;       ind[i] = i;     }     sort(ind + 1, ind + n + 1, comp);     int k = 1;     st[1] = ind[1];     val[1] = ((long double)1000000000000000);     for (i = 2; i <= n; ++i) {       int l = ind[i];       while (true && k > 0) {         long double v1 = 1.0 / A[st[k]].first + val[k] / (A[st[k]].second);         long double v2 = 1.0 / A[l].first + val[k] / (A[l].second);         if (eql(v1, v2)) break;         if (v2 < v1) {           --k;           continue;         }         break;       }       if (k == 0) {         st[++k] = l;         continue;       }       st[++k] = l;       val[k] = bs(val[k - 1], A[st[k - 1]], A[l]);     }     sort(st + 1, st + k + 1);     for (i = 1; i <= k; ++i) cout << st[i] <<    ;     return 0;   }   