Submission #400854

#TimeUsernameProblemLanguageResultExecution timeMemory
400854timmyfengBubble Sort 2 (JOI18_bubblesort2)C++17
100 / 100
2429 ms51432 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 1000000;

array<int, 2> values[N];
int maxi[4 * N], lazy[4 * N], m;

void update(int a, int b, int x, int u = 1, int l = 0, int r = m - 1) {
    if (a > b || b < l || r < a) {
        return;
    } else if (a <= l && r <= b) {
        lazy[u] += x;
        maxi[u] += x;
    } else {
        int m = (l + r) / 2;
        update(a, b, x, 2 * u, l, m);
        update(a, b, x, 2 * u + 1, m + 1, r);
        maxi[u] = max(maxi[2 * u], maxi[2 * u + 1]) + lazy[u];
    }
}

void assign(int a, int x, int u = 1, int l = 0, int r = m - 1) {
    if (l == r) {
        maxi[u] = x + lazy[u];
    } else {
        int m = (l + r) / 2;
        if (a <= m) {
            assign(a, x, 2 * u, l, m);
        } else {
            assign(a, x, 2 * u + 1, m + 1, r);
        }
        maxi[u] = max(maxi[2 * u], maxi[2 * u + 1]) + lazy[u];
    }
}

void insert(int a, int i, int k) {
    a = lower_bound(values, values + m, array<int, 2>{a, i}) - values;
    update(a + 1, m - 1, k);
    assign(a, k == 1 ? 0 : i);
}

vector<int> countScans(vector<int> a, vector<int> x, vector<int> v) {
    int n = a.size(), q = x.size();

    for (int i = 0; i < n; ++i) {
        values[i] = {a[i], i};
    }

    for (int i = 0; i < q; ++i) {
        values[n + i] = {v[i], x[i]};
    }

    sort(values, values + n + q);
    m = unique(values, values + n + q) - values;

    for (int i = 0; i < n; ++i) {
        insert(a[i], i, -1);
    }

    vector<int> ans(q);
    for (int i = 0; i < q; ++i) {
        insert(a[x[i]], x[i], 1);
        a[x[i]] = v[i];
        insert(v[i], x[i], -1);
        ans[i] = maxi[1];
    }

    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...