Submission #899607

#TimeUsernameProblemLanguageResultExecution timeMemory
899607simona1230Stone Arranging 2 (JOI23_ho_t1)C++17
100 / 100
220 ms29668 KiB
#include <bits/stdc++.h> using namespace std; int n; map<int,vector<int> > mp; int t[800001]; int query(int i,int l,int r,int idx) { if(l==r||t[i])return t[i]; int m=(l+r)/2; if(idx<=m)return query(i*2,l,m,idx); else return query(i*2+1,m+1,r,idx); } void update(int i,int l,int r,int ql,int qr) { if(ql>qr||t[i])return; if(ql<=l&&r<=qr) { t[i]=1; return; } int m=(l+r)/2; update(i*2,l,m,ql,min(m,qr)); update(i*2+1,m+1,r,max(m+1,ql),qr); } int l[200001],val[200001]; void solve() { cin>>n; for(int i=1;i<=n;i++) { int x; cin>>x; val[i]=x; while(mp[x].size()&&query(1,1,n,mp[x][mp[x].size()-1])==1) mp[x].pop_back(); if(mp[x].size()) { l[i]=mp[x][mp[x].size()-1]; update(1,1,n,mp[x][mp[x].size()-1],i-1); } else l[i]=i; mp[x].push_back(i); } } void print() { int curr=n; vector<int> ans; for(int i=n;i>=1;i--) { while(curr>=l[i]) { ans.push_back(val[i]); curr--; } } for(int i=n-1;i>=0;i--) cout<<ans[i]<<" "; cout<<endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); solve(); print(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...