제출 #942384

#제출 시각아이디문제언어결과실행 시간메모리
942384tnknguyen_Stone Arranging 2 (JOI23_ho_t1)C++14
100 / 100
441 ms687740 KiB
/**
 * @file main.cpp
 * @author tnknguyen_ (nguyenngockhoitran@gmail.com)
 * @date 07-03-2024
 * 
 * @copyright Copyright (c) 2024
 * https://oj.uz/problem/view/JOI23_ho_t1
 */
#include <bits/stdc++.h>
using namespace std;
#define endl '\n' 

const int sz = 1e6 + 5;
vector<int> b;
stack<int> pos[sz];
int a[sz], ans[sz];

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    //freopen("main.inp","r",stdin);
    //freopen("main.out","w",stdout);

    int n;
    cin>>n;
    
    for(int i=1;i<=n;++i){
        cin>>a[i];
        b.push_back(a[i]);
    }

    sort(b.begin(), b.end());
    b.erase(unique(b.begin(), b.end()), b.end());
    for(int i=1;i<=n;++i){
        a[i] = lower_bound(b.begin(), b.end(), a[i]) - b.begin() + 1;
    }

    stack<int> st;
    for(int i=1;i<=n;++i){
        while(pos[a[i]].size() && st.size() && st.top() > pos[a[i]].top()){
            pos[a[st.top()]].pop();
            st.pop();
        }
        st.push(i);
        pos[a[i]].push(i);
    }

    while(st.size()){
        ans[st.top()] = a[st.top()];
        st.pop();
    }

    int val = a[1];
    for(int i=1;i<=n;++i){
        if(ans[i]){
            val = b[ans[i] - 1];
        }
        cout<<val<<endl;
    }

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