제출 #1286756

#제출 시각아이디문제언어결과실행 시간메모리
1286756Faisal_SaqibStone Arranging 2 (JOI23_ho_t1)C++20
100 / 100
240 ms26040 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-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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...