Submission #1270730

#TimeUsernameProblemLanguageResultExecution timeMemory
1270730nguyenvietanhStone Arranging 2 (JOI23_ho_t1)C++20
100 / 100
357 ms33988 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long
#define fi first
#define se second
#define pii pair<int,int>
#define inp(name) freopen(name, "r", stdin);
#define out(name) freopen(name, "w", stdout);

const int N = 2e5 + 5;
int n, q;
int a[N], st[4 * N], lazy[4 * N];
void apply(int node, int v){
    st[node] = lazy[node] = v;
}
void push(int node, int l, int r){
    int v = lazy[node];
    if (!v || l == r) return;
    apply(node * 2, v); apply(node * 2 + 1, v);
    lazy[node] = 0;
}
void update(int node, int l, int r, int lf, int rt, int v){
    if (l > rt || r < lf) return;
    if (lf <= l && r <= rt){
        apply(node, v);
        return;
    }
    push(node, l, r);
    int mid = (l + r)/2;
    update(node * 2, l, mid, lf, rt, v);
    update(node * 2 + 1, mid + 1, r, lf, rt, v);
}
int get(int node, int l, int r, int pos){
    if (l > pos || r < pos) return 0;
    if (l == r) return st[node];
    push(node, l, r);
    int mid = (l + r)/2;
    return get(node * 2, l, mid, pos) + get(node * 2 + 1, mid + 1, r, pos);
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    map <int, vector<int>> mp;
    for (int i = 1; i <= n; i ++){
        cin >> a[i];
        mp[a[i]].push_back(i);
        int l = 0, r = mp[a[i]].size() - 1, res = r;
        //cout << i << " " << r << '\n';
        while (l <= r){
            int mid = (l + r)/2;
            if (get(1, 1, n, mp[a[i]][mid]) == a[i]){
                res = mid; l = mid + 1;
            }
            else r = mid - 1;
        }
        //cout << i << " " << res << '\n';
        update(1, 1, n, mp[a[i]][res], i, a[i]);
    }
    for (int i = 1; i <= n; i ++){
        cout << get(1, 1, n, i) << '\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...