Submission #634368

# Submission time Handle Problem Language Result Execution time Memory
634368 2022-08-24T09:59:53 Z Ooops_sorry Measures (CEOI22_measures) C++17
100 / 100
493 ms 53732 KB
#include<bits/stdc++.h>

using namespace std;

mt19937 rnd(51);

#define ll long long
#define pb push_back
#define ld long double

const int N = 2e5 + 100;
const ll INF = 1e18;

struct node {
    ll ans, mx, mn;
    node() {
        ans = 0, mx = -INF, mn = INF;
    }
    node(ll ans_, ll mx_, ll mn_) {
        ans = ans_, mx = mx_, mn = mn_;
    }
};

struct SegTree {
    vector<ll> add;
    vector<node> t;
    SegTree(int n) {
        t.resize(4 * n);
        add.resize(4 * n, 0);
    }
    void inc(int v, ll val) {
        t[v].mn += val;
        t[v].mx += val;
        add[v] += val;
    }
    void push(int v) {
        inc(v * 2, add[v]);
        inc(v * 2 + 1, add[v]);
        add[v] = 0;
    }
    void upd(int v) {
        node a = t[v * 2], b = t[v * 2 + 1], res;
        res.ans = max({a.ans, b.ans, b.mx - a.mn});
        res.mn = min(a.mn, b.mn);
        res.mx = max(a.mx, b.mx);
        t[v] = res;
    }
    void update_pos(int v, int l, int r, int pos, ll val) {
        if (l == r) {
            t[v].mn = t[v].mx = val;
            return;
        }
        push(v);
        int m = (l + r) / 2;
        if (pos <= m) {
            update_pos(2 * v, l, m, pos, val);
        } else {
            update_pos(2 * v + 1, m + 1, r, pos, val);
        }
        upd(v);
    }
    void update(int v, int tl, int  tr, int l, int r, ll val) {
        if (l > r) return;
        if (tl == l && tr == r) {
            inc(v, val);
            return;
        }
        push(v);
        int tm = (tl + tr) / 2;
        update(2 * v, tl, tm, l, min(r, tm), val), update(2 * v + 1, tm + 1, tr, max(l, tm + 1), r, val);
        upd(v);
    }
};

struct Fenwick {
    vector<int> t;
    Fenwick(int n) {
        t.resize(n);
    }
    void inc(int i, int d) {
        for (; i < t.size(); i = (i | (i + 1))) {
            t[i] += d;
        }
    }
    int get(int r) {
        int ans = 0;
        for (; r >= 0; r = (r & (r + 1)) - 1) {
            ans += t[r];
        }
        return ans;
    }
};

signed main() {
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
#endif // LOCAL
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, m, d;
    cin >> n >> m >> d;
    vector<int> a(n), b(m), u;
    map<int, vector<int>> pos;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        u.pb(a[i]);
    }
    for (int i = 0; i < m; i++) {
        cin >> b[i];
        u.pb(b[i]);
    }
    sort(u.begin(), u.end());
    int sz = u.size();
    for (int i = 0; i < sz; i++) {
        pos[u[i]].pb(i);
    }
    SegTree t(sz);
    Fenwick f(sz);
    auto add = [&](int a) -> int {
        int ind = pos[a].back();
        pos[a].pop_back();
        t.update(1, 0, sz - 1, ind + 1, sz - 1, d);
        t.update_pos(1, 0, sz - 1, ind, (ll)f.get(ind) * d - u[ind]);
        f.inc(ind, 1);
        return 0;
    };
    for (int i = 0; i < n; i++) {
        add(a[i]);
    }
    for (int i = 0; i < m; i++) {
        add(b[i]);
        cout << t.t[1].ans / 2;
        if (t.t[1].ans % 2 == 1) {
            cout << ".5";
        }
        cout << ' ';
    }
    cout << endl;
    return 0;
}

Compilation message

Main.cpp: In member function 'void Fenwick::inc(int, int)':
Main.cpp:81:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |         for (; i < t.size(); i = (i | (i + 1))) {
      |                ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 724 KB Output is correct
2 Correct 2 ms 724 KB Output is correct
3 Correct 2 ms 824 KB Output is correct
4 Correct 2 ms 744 KB Output is correct
5 Correct 2 ms 848 KB Output is correct
6 Correct 2 ms 844 KB Output is correct
7 Correct 2 ms 852 KB Output is correct
8 Correct 2 ms 852 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 724 KB Output is correct
2 Correct 2 ms 724 KB Output is correct
3 Correct 2 ms 824 KB Output is correct
4 Correct 2 ms 744 KB Output is correct
5 Correct 2 ms 848 KB Output is correct
6 Correct 2 ms 844 KB Output is correct
7 Correct 2 ms 852 KB Output is correct
8 Correct 2 ms 852 KB Output is correct
9 Correct 484 ms 50920 KB Output is correct
10 Correct 436 ms 50224 KB Output is correct
11 Correct 156 ms 28748 KB Output is correct
12 Correct 255 ms 50680 KB Output is correct
13 Correct 219 ms 50320 KB Output is correct
14 Correct 259 ms 50132 KB Output is correct
15 Correct 472 ms 50324 KB Output is correct
16 Correct 237 ms 49932 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 242 ms 50656 KB Output is correct
2 Correct 252 ms 52560 KB Output is correct
3 Correct 160 ms 32416 KB Output is correct
4 Correct 246 ms 51016 KB Output is correct
5 Correct 267 ms 52920 KB Output is correct
6 Correct 252 ms 51588 KB Output is correct
7 Correct 278 ms 53224 KB Output is correct
8 Correct 252 ms 52220 KB Output is correct
9 Correct 262 ms 51504 KB Output is correct
10 Correct 247 ms 53584 KB Output is correct
11 Correct 276 ms 52280 KB Output is correct
12 Correct 245 ms 53356 KB Output is correct
13 Correct 259 ms 51104 KB Output is correct
14 Correct 247 ms 53504 KB Output is correct
15 Correct 251 ms 52344 KB Output is correct
16 Correct 282 ms 51580 KB Output is correct
17 Correct 250 ms 52844 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 242 ms 50656 KB Output is correct
2 Correct 252 ms 52560 KB Output is correct
3 Correct 160 ms 32416 KB Output is correct
4 Correct 246 ms 51016 KB Output is correct
5 Correct 267 ms 52920 KB Output is correct
6 Correct 252 ms 51588 KB Output is correct
7 Correct 278 ms 53224 KB Output is correct
8 Correct 252 ms 52220 KB Output is correct
9 Correct 262 ms 51504 KB Output is correct
10 Correct 247 ms 53584 KB Output is correct
11 Correct 276 ms 52280 KB Output is correct
12 Correct 245 ms 53356 KB Output is correct
13 Correct 259 ms 51104 KB Output is correct
14 Correct 247 ms 53504 KB Output is correct
15 Correct 251 ms 52344 KB Output is correct
16 Correct 282 ms 51580 KB Output is correct
17 Correct 250 ms 52844 KB Output is correct
18 Correct 493 ms 51096 KB Output is correct
19 Correct 490 ms 53536 KB Output is correct
20 Correct 158 ms 32748 KB Output is correct
21 Correct 283 ms 52032 KB Output is correct
22 Correct 363 ms 52092 KB Output is correct
23 Correct 262 ms 51776 KB Output is correct
24 Correct 493 ms 52384 KB Output is correct
25 Correct 241 ms 52036 KB Output is correct
26 Correct 472 ms 51804 KB Output is correct
27 Correct 493 ms 53732 KB Output is correct
28 Correct 380 ms 52424 KB Output is correct
29 Correct 457 ms 52416 KB Output is correct
30 Correct 282 ms 51128 KB Output is correct
31 Correct 275 ms 53452 KB Output is correct
32 Correct 267 ms 52420 KB Output is correct
33 Correct 470 ms 50516 KB Output is correct
34 Correct 273 ms 51784 KB Output is correct