Submission #1359131

#TimeUsernameProblemLanguageResultExecution timeMemory
1359131DormonStone Arranging 2 (JOI23_ho_t1)C++20
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 2;
int fw[N];

void upd(int i, int val){
    for (i++;i < N;i+=i&-i) fw[i] += val;
}
int qry(int i){
    int res = 0; for (i++;i;i-=i&-i) res += fw[i]; return res;
}

int main() 
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int n;
    cin >> n;
    map<int, stack<int>> mp;
    struct lz {
        int l, r, c;
        bool operator < (const lz &o) const {
            return r < o.r;
        }
    };
    vector<lz> ans;
    vector<int> v(n);
    for (int i = 0;i < n;i++){
        cin >> v[i];
        while (!mp[v[i]].empty() && qry(mp[v[i]].top()))
            mp[v[i]].pop();
        if (!mp[v[i]].empty()){
            upd(mp[v[i]].top(), 1);
            upd(i - 1, -1);
            ans.push_back({mp[v[i]].top(), i, v[i]});
            mp[v[i]].pop();
        }
        mp[v[i]].push(i);
    }
    int ll = n + 1;
    sort(ans.rbegin(), ans.rend());
    for (auto [l, r, c]:ans){
        if (l > ll) continue;
        ll = l;
        for (int i = l;i <= r;i++)
            v[i] = c;
    }
    for (auto e:v) cout << e << '\n';
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...