Submission #729418

#TimeUsernameProblemLanguageResultExecution timeMemory
729418abcvuitunggioStone Arranging 2 (JOI23_ho_t1)C++17
100 / 100
100 ms8756 KiB
#include <bits/stdc++.h> using namespace std; int n,a[200001],p[200001],r[200001],sz[200001],pos[200001]; vector <int> ve; int f(int i){ return (p[i]==i?i:p[i]=f(p[i])); } void unite(int i, int j){ i=f(i); j=f(j); if (sz[i]<sz[j]) swap(i,j); p[j]=i; sz[i]+=sz[j]; pos[a[min(r[i],r[j])]]=-1; pos[a[max(r[i],r[j])]]=r[j]; r[i]=max(r[i],r[j]); } int main(){ ios_base::sync_with_stdio(NULL);cin.tie(nullptr); cin >> n; for (int i=1;i<=n;i++){ cin >> a[i]; p[i]=r[i]=i; sz[i]=1; ve.push_back(a[i]); } memset(pos,-1,sizeof(pos)); sort(ve.begin(),ve.end()); ve.resize(unique(ve.begin(),ve.end())-ve.begin()); for (int i=1;i<=n;i++){ a[i]=lower_bound(ve.begin(),ve.end(),a[i])-ve.begin(); if (pos[a[i]]==-1){ pos[a[i]]=i; continue; } int j=pos[a[i]]; while (j<i){ j=r[f(j)]; unite(j,j+1); j++; } } for (int i=1;i<=n;i++) cout << ve[a[r[f(i)]]] << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...