Submission #810672

#TimeUsernameProblemLanguageResultExecution timeMemory
810672_martynasStone Arranging 2 (JOI23_ho_t1)C++17
100 / 100
216 ms20624 KiB
#include <bits/stdc++.h>

using namespace std;

#define fi first
#define se second
#define pb push_back

using pii = pair<int, int>;

const int mxn = 2e5+5;

int n;
int A[mxn];

int main() {
    cin >> n;
    stack<pii> st;
    set<int> S;
    for(int i = 0; i < n; i++) {
        cin >> A[i];
    }
    st.push({A[0], 0}); S.insert(A[0]);
    vector<pii> events[mxn];
    for(int i = 1; i < n; i++) {
        int j = -1;
        while(S.count(A[i])) {
            j = st.top().se;
            S.erase(st.top().fi);
            st.pop();
        }
        st.push({A[i], i});
        S.insert(A[i]);
        if(j != -1) {
            events[i].pb({A[i], j});
        }
    }
    queue<pii> Q;
    for(int i = n-1; i >= 0; i--) {
        assert(events[i].size() <= 1);
        for(auto p : events[i]) {
            Q.push(p);
        }
        while(!Q.empty() && Q.front().se > i) {
            Q.pop();
        }
        if(!Q.empty()) {
            A[i] = Q.front().fi;
        }
    }
    for(int i = 0; i < n; i++) {
        cout << A[i] << " ";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...