Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include "bits/stdc++.h"
- using namespace std;
- #define all(a) a.begin(), a.end()
- #define int long long
- const int inf = 1e18;
- const int N = 1e5 + 100;
- struct Line {
- int b, k, ind;
- Line(int _b, int _k) : b(_b), k(_k) {}
- Line(int _b, int _k, int ind_) : b(_b), k(_k), ind(ind_) {}
- Line() {
- b = 1e18;
- k = 0;
- }
- int get(int x) {
- return k * x + b;
- }
- };
- struct Node {
- Line v = { inf, 0 };
- Node* l = nullptr;
- Node* r = nullptr;
- Node* getl() {
- if (l == nullptr) {
- l = new Node();
- }
- return l;
- }
- Node* getr() {
- if (r == nullptr) {
- r = new Node();
- }
- return r;
- }
- };
- void update(Node* t, int tl, int tr, Line u) {
- int tm = (tl + tr) / 2;
- bool m = t->v.get(tm) > u.get(tm),
- l = t->v.get(tl) > u.get(tl);
- if (tl + 1 == tr) {
- return;
- }
- if (m) {
- swap(t->v, u);
- }
- if (m != l) {
- update(t->getl(), tl, tm, u);
- }
- else {
- update(t->getr(), tm, tr, u);
- }
- }
- void get_mn(Node* t, int tl, int tr, int x, int& res) {
- res = min(res, t->v.get(x));
- int tm = (tl + tr) / 2;
- if (x < tm) {
- if (t->l == nullptr) {
- return;
- }
- get_mn(t->l, tl, tm, x, res);
- }
- else {
- if (t->r == nullptr) {
- return;
- }
- get_mn(t->r, tm, tr, x, res);
- }
- }
- signed main() {
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- Node* dp[3][6];
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < 6; j++) {
- dp[i][j] = new Node();
- }
- }
- int n, ans = inf; cin >> n;
- for (int i = 0; i < n; i++) {
- int q, t; cin >> q >> t;
- int dp_now = (i == 0 ? 0 : inf);
- for (int t_f = 1; t_f <= 3; t_f++) {
- int x = i / (2 * t_f);
- get_mn(dp[t_f - 1][i % (2 * t_f)], -N, N, x, dp_now);
- }
- update(dp[t - 1][i % (2 * t)], -N, N, Line(-q * (i / (2 * t)) + dp_now, q));
- ans = min(ans, dp_now + q * ((n - i) / (2 * t) + 1));
- //cout << dp_now << '\n';
- }
- cout << ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement