제출 #1346743

#제출 시각아이디문제언어결과실행 시간메모리
1346743nguyenkhangninh99Bubble Sort 2 (JOI18_bubblesort2)C++20
100 / 100
1113 ms40428 KiB
#include "bubblesort2.h"
#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e6 + 5;
int st[4 * maxn], lazy[4 * maxn];  
void apply(int id, int val){
    st[id] += val, lazy[id] += val;
}
void update(int id, int l, int r, int u, int v, int val){
    if(v < u || r < u || v < l) return;
    if(u <= l && r <= v) apply(id, val);
    else{
        apply(id * 2, lazy[id]);
        apply(id * 2 + 1, lazy[id]);
        lazy[id] = 0;
        int mid = (l + r) / 2;
        update(id * 2, l, mid, u, v, val);
        update(id * 2 + 1, mid + 1, r, u, v, val);
        st[id] = max(st[id * 2], st[id * 2 + 1]);
    }
}

vector<int> countScans(vector<int> a, vector<int> x, vector<int> v){
    vector<pair<int, int>> cmp;
    for(int i = 0; i < a.size(); i++) cmp.push_back({a[i], i});
    for(int i = 0; i < v.size(); i++) cmp.push_back({v[i], x[i]});
    sort(cmp.begin(), cmp.end());
    cmp.erase(unique(cmp.begin(), cmp.end()), cmp.end());

    int n = cmp.size();
    for(int i = 0; i < a.size(); i++){
        a[i] = lower_bound(cmp.begin(), cmp.end(), pair<int, int>{a[i], i}) - cmp.begin() + 1;
        update(1, 1, n, a[i], a[i], i);
        update(1, 1, n, a[i] + 1, n, -1);
    }

    vector<int> res;
    for(int i = 0; i < v.size(); i++){
        v[i] = lower_bound(cmp.begin(), cmp.end(), pair<int, int>{v[i], x[i]}) - cmp.begin() + 1;
        update(1, 1, n, a[x[i]], a[x[i]], -x[i]);
        update(1, 1, n, a[x[i]] + 1, n, 1);
        update(1, 1, n, v[i], v[i], x[i]);
        update(1, 1, n, v[i] + 1, n, -1);
        a[x[i]] = v[i];
        res.push_back(st[1]);
    }
    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...