func_code_string: #include <bits/stdc++.h>   using namespace std;   long long get() {     long long x = 0;     char s = getchar();     while (s <  0  || s >  9 ) s = getchar();     while (s >=  0  && s <=  9 )       x = (x << 3) + (x << 1) + (s ^ 48), s = getchar();     return x;   }   long long Max(const long long x, const long long y) {     if (x > y) return x;     return y;   }   long long pow2(const long long x) { return x * x; }   const long long M = 3e5 + 5, INF = 2e18;   long long n, a, d[M], c[M], f[M];   struct node {     long long d, mxf, mxans;     node() {}     node(const long long D, const long long MXF, const long long MXANS) {       d = D, mxf = MXF, mxans = MXANS;     }   };   stack<node> s;   signed main() {     n = get(), a = get();     for (long long i = 1; i <= n; ++i)       d[i] = get(), c[i] = c[i - 1] + get(), f[i] = a * i - c[i];     long long ans = Max(0, a - (c[n] - c[n - 1]));     s.push(node(0, f[n], f[n]));     long long mxf_pre;     for (long long l = n - 1; l; --l) {       mxf_pre = -INF;       while (!s.empty() && s.top().d <= d[l + 1] - d[l]) {         mxf_pre = Max(mxf_pre, s.top().mxf);         s.pop();       }       if (mxf_pre != -INF && !s.empty())         s.push(node(d[l + 1] - d[l], mxf_pre,                     Max(mxf_pre - pow2(d[l + 1] - d[l]), s.top().mxans)));       else         s.push(node(d[l + 1] - d[l], mxf_pre,                     Max(mxf_pre - pow2(d[l + 1] - d[l]), -INF)));       if (!s.empty())         s.push(node(0, f[l], Max(f[l], s.top().mxans)));       else         s.push(node(0, f[l], Max(f[l], -INF)));       if (!s.empty())         ans = Max(ans, s.top().mxans - f[l - 1]);       else         ans = Max(ans, -INF);     }     printf( %lld , ans);     return 0;   }   