제출 #915644

#제출 시각아이디문제언어결과실행 시간메모리
915644berrStone Arranging 2 (JOI23_ho_t1)C++17
100 / 100
158 ms34220 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int mod = 1e9+7; struct dsu{ int n; vector<int> p; dsu(int _n){ n = _n; p.resize(n); iota(p.begin(), p.end(), 0); } int find(int x){ if(p[x]==x) return x; return p[x] = find(p[x]); } void merge(int x, int y){ x= find(x); y = find(y); if(x==y) return; if(x>y) swap(x, y); p[y] = x; } }; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<int> a(n), t; map<int, int> mp; for(auto &i: a) cin >> i; for(int i=0; i<n; i++){ if(!mp.count(a[i])){ mp[a[i]] = t.size(); t.push_back(a[i]); } a[i] = mp[a[i]]; } dsu d(n); vector<vector<int>> g(t.size()+1); vector<int> s; for(int i=0; i<n; i++){ if(g[a[i]].size()==0){ s.push_back(i); g[a[i]].push_back(i); } else{ while(s.size()&&s.back() > g[a[i]].back()){ g[a[d.find(s.back())]].pop_back(); d.merge(g[a[i]].back(), s.back()); s.pop_back(); } g[a[i]].push_back(i); s.push_back(i); } } for(int i=0; i<n; i++) cout<<t[a[d.find(i)]]<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...