func_code_string: #include <bits/stdc++.h>   using namespace std;   typedef struct {     long long v;     long long c;   } double_pair;   struct line {     long long k, b;     line() {}     line(long long _k, long long _b) : k(_k), b(_b) {}     long long Solve(long long val) {       long long _a = val - b, _b = k;       if (_a % _b == 0)         return _a / _b;       else         return _a / _b + 1;     }     long long f(long long x) { return k * x + b; }   };   double_pair D[300000];   int n;   line St[300000];   int top;   long long X[300000], s;   long long intersection(line a, line b) {     long long _a = a.b - b.b, _b = b.k - a.k;     if (_a % _b == 0)       return _a / _b;     else       return _a / _b + 1;   }   bool slope_compare(double_pair d1, double_pair d2) {     return ((d1.c < d2.c) || (d1.c == d2.c && d1.v > d2.v));   }   bool check(long long x, long long _s) {     if (x > X[top - 1]) return x >= St[top].Solve(_s);     int pos = lower_bound(X + 1, X + top, x) - X;     if (X[pos] == x) pos++;     return x >= St[pos].Solve(_s);   }   long long chat(long long _s) {     long long l = 0, r = _s, mid;     while (l + 1 < r) {       mid = (l + r) >> 1;       if (check(mid, _s))         r = mid;       else         l = mid;     }     return r;   }   void find_hull() {     St[++top] = line(D[0].v, -D[0].c);     long long i1, i2;     for (int i = 1; i < n; ++i) {       long long x0 = chat(D[i].c);       long long p = lower_bound(X + 1, X + top, x0) - X;       long long y0 =           St[p + (X[p] == x0)].k * x0 + St[p + (X[p] == x0)].b - D[i].c;       line tmp(D[i].v, y0 - x0 * D[i].v);       while (top >= 2 && (((i1 = intersection(tmp, St[top])) <=                                (i2 = intersection(St[top], St[top - 1])) ||                            (i1 == i2 && tmp.f(i1) >= St[top].f(i1)))))         --top;       St[++top] = tmp;       X[top - 1] = intersection(St[top], St[top - 1]);     }   }   int main() {     cin >> n >> s;     for (int i = 1; i <= n; i++) cin >> D[i].v >> D[i].c;     sort(D + 1, D + n + 1, slope_compare);     int tmp_n = n, maxv = 0;     n = 0;     for (int i = 1; i <= tmp_n; i++) {       if (maxv >= D[i].v) continue;       maxv = D[i].v;       D[n++] = D[i];     }     find_hull();     cout << chat(s);     return 0;   }   