func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 2e5 + 7;   const long long inf = 1e17 + 7;   pair<long long, long long> a[maxn];   pair<long long, long long> A[maxn];   pair<pair<long long, long long>, pair<long long, long long> > S[maxn];   int pos;   inline long long elf(pair<long long, long long> z, long long x) {     return z.first * x + z.second;   }   inline long long earl(pair<long long, long long> z, long long v) {     long long a = z.first, b = z.second;     long long x = (v - b) / a;     if (a * x >= v - b) return x;     return x + 1;   }   inline long double intx(pair<long long, long long> l1,                           pair<long long, long long> l2) {     long long a1 = l1.first, a2 = l2.first, b1 = l1.second, b2 = l2.second;     return (long double)(b2 - b1) / (long double)(a1 - a2);   }   void ins(long long a, long long b) {     while (pos >= 2 && intx(S[pos].first, S[pos - 1].first) >=                            intx(make_pair(a, b), S[pos].first))       pos--;     S[pos].second.second = ceil(intx(S[pos].first, make_pair(a, b))) - 1;     pos++;     S[pos] =         make_pair(make_pair(a, b),                   make_pair(ceil(intx(S[pos - 1].first, make_pair(a, b))), inf));   }   int main() {     int n;     long long s;     scanf( %d %lld , &n, &s);     for (int i = 1; i <= n; i++) {       scanf( %lld %lld , &a[i].first, &a[i].second);     }     sort(a + 1, a + n + 1);     a[0].first = -1;     long long cur = -1;     long long best = inf;     int idx = 0;     for (int i = n; i >= 0; i--) {       if (a[i].first != cur) {         if (cur > 0) {           idx++;           A[idx] = make_pair(cur, best);         }         cur = a[i].first;         best = inf;       }       best = min(best, a[i].second);     }     n = idx;     for (int i = 1; i <= n; i++) a[i] = A[i];     best = inf;     idx = 0;     for (int i = 1; i <= n; i++) {       if (a[i].second >= best) continue;       idx++;       A[idx] = a[i];       best = min(best, a[i].second);     }     n = idx;     reverse(A + 1, A + n + 1);     long long ans = inf;     pos = 1;     S[pos] = make_pair(make_pair(A[1].first, 0), make_pair(0, inf));     int fp = 1;     for (int i = 2; i <= n; i++) {       while (fp < pos && elf(S[fp].first, S[fp].second.second) < A[i].second)         fp++;       long long cx = earl(S[fp].first, A[i].second);       long long fcx = elf(S[fp].first, cx);       ins(A[i].first, fcx - A[i].second - A[i].first * cx);       fp = min(fp, pos);     }     for (int i = 1; i <= pos; i++) {       ans = min(ans, earl(S[i].first, s));     }     printf( %lld n , ans);   }   