Advertisement
Guest User

Juanzhang

a guest
Jun 4th, 2019
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.72 KB | None | 0 0
  1. #include <cstdio>
  2. using namespace std;
  3.  
  4. typedef double db;
  5. typedef long long ll;
  6. const int maxn = 1e4 + 10;
  7. ll f[maxn];
  8. int n, S, F[maxn], T[maxn], Q[maxn];
  9.  
  10. inline db slope(int x, int y) {
  11.   return db(f[x] - f[y]) / db(T[x] - T[y]);
  12. }
  13.  
  14. int main() {
  15.   scanf("%d %d", &n, &S);
  16.   for (int i = 1; i <= n; i++) {
  17.     scanf("%d %d", T + i, F + i);
  18.   }
  19.   for (int i = n - 1; i; i--) {
  20.     T[i] += T[i + 1], F[i] += F[i + 1];
  21.   }
  22.   int l = 1, r = 1;
  23.   for (int i = n; i; i--) {
  24.     while (l < r && slope(Q[l], Q[l + 1]) < F[i]) l++;
  25.     f[i] = f[Q[l]] + 1ll * F[i] * (S + T[i] - T[Q[l]]);
  26.     while (l < r && slope(Q[r], Q[r - 1]) > slope(Q[r], i)) r--;
  27.     Q[++r] = i;
  28.   }
  29.   printf("%lld", f[1]);
  30.   return 0;
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement