#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-1]=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;
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |