# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1146406 | ReLice | Permutation Recovery (info1cup17_permutation) | C++20 | 2 ms | 5388 KiB |
#include <bits/stdc++.h>
#define ll long long
#define ld double
#define pb push_back
#define pf push_front
#define ins insert
#define fr first
#define sc second
#define endl "\n"
#define all(x) x.begin(), x.end()
using namespace std;
void fre(string& name){freopen((name + ".in").c_str(), "r", stdin);freopen((name + ".out").c_str(), "w", stdout);}
void start(){ios_base::sync_with_stdio(NULL);cin.tie(nullptr);cout.tie(nullptr);}
const ll N = 2e5 + 5;
const ll inf = 1e9;
const ll mod = 1e9 + 7;
vector<vector<ll>> g(N);
ll ans[N];
ll vis[N];
vector<ll> tour;
void dfs(ll v){
for(auto i : g[v]){
if(vis[i]) continue;
dfs(i);
}
vis[v] = 1;
tour.pb(v);
}
void solve() {
ll i, j;
ll n;
cin>>n;
ll q[n + 1];
ll a[n + 1];
q[0] = 0;
vector<ll> mn, mx;
for(i=1;i<=n;i++) {
cin>>q[i];
a[i] = q[i] - q[i - 1];
if(i > 1){
if(a[i] > a[i - 1]) g[i - 1].pb(i);
else g[i].pb(i - 1);
}
if(a[i] == 1){
mn.pb(i);
for(j=i - 1;j>0;j--){
if(j < i - 1) g[i].pb(j);
//cout<<i<<' '<<j<<endl;
if(a[j] == 1) break;
}
}
else if(a[i] == q[i - 1] + 1){
mx.pb(a[i]);
for(j=i - 1;j>0;j--){
if(j < i - 1) g[j].pb(i);
//cout<<j<<' '<<i<<endl;
if(a[j] == q[j - 1] + 1) break;
}
}
}
for(i=mn.back() + 2;i<=n;i++){
g[mn.back()].pb(i);
}
for(i=mx.back() + 2;i<=n;i++){
g[i].pb(mx.back());
}
dfs(mn.back());
reverse(all(tour));
for(i=0;i<n;i++){
ans[tour[i]] = i + 1;
}
for(i=1;i<=n;i++) cout<<ans[i]<<' ';
cout<<endl;
}
signed main(){
start();
ll t = 1;
//cin>>t;
while(t--) solve();
}
/*
*/
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |