Submission #1286751

#TimeUsernameProblemLanguageResultExecution timeMemory
1286751Faisal_SaqibStone Arranging 2 (JOI23_ho_t1)C++20
0 / 100
1 ms332 KiB
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+100;
int par[N],a[N],cp[N];
vector<int> lst[N];
int get(int x)
{
    if(par[x]==x)
    {
        return x;
    }
    return par[x]=get(par[x]);
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    vector<int> tp(n);
    for(int i=1;i<=n;i++)
    {
        par[i]=i;
        cin>>a[i];
        tp[i]=a[i];
    }
    sort(begin(tp),end(tp));
    tp.resize(unique(begin(tp),end(tp))-begin(tp));
    for(int i=1;i<=n;i++)
    {
        int x=lower_bound(begin(tp),end(tp),a[i])-begin(tp);
        cp[i]=x;
    }
    set<int> root;
    for(int i=1;i<=n;i++)
    {
        int x=cp[i];
        if(lst[x].size()>0)
        {
            int j=lst[x].back();
            while(1)
            {
                auto it=root.lower_bound(j);
                if(it==end(root) or *it>i)break;
                int p=*it;
                par[p]=i;
                lst[cp[p]].pop_back();
                root.erase(it);
            }
        }
        lst[x].push_back(i);
        root.insert(i);
    }
    for(int i=1;i<=n;i++)
    {
        cout<<a[get(i)]<<endl;
    }
    // cout<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...