Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- using namespace std;
- typedef double db;
- typedef long long ll;
- const int maxn = 1e4 + 10;
- ll f[maxn];
- int n, S, F[maxn], T[maxn], Q[maxn];
- inline db slope(int x, int y) {
- return db(f[x] - f[y]) / db(T[x] - T[y]);
- }
- int main() {
- scanf("%d %d", &n, &S);
- for (int i = 1; i <= n; i++) {
- scanf("%d %d", T + i, F + i);
- }
- for (int i = n - 1; i; i--) {
- T[i] += T[i + 1], F[i] += F[i + 1];
- }
- int l = 1, r = 1;
- for (int i = n; i; i--) {
- while (l < r && slope(Q[l], Q[l + 1]) < F[i]) l++;
- f[i] = f[Q[l]] + 1ll * F[i] * (S + T[i] - T[Q[l]]);
- while (l < r && slope(Q[r], Q[r - 1]) > slope(Q[r], i)) r--;
- Q[++r] = i;
- }
- printf("%lld", f[1]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement