This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "books.h"
#define dbg(x) cerr<<#x<<": "<<x<<endl
#define here cerr<<"================================\n"
#include <bits/stdc++.h>
#define ll long long
#define llinf 1000000000000000000LL
#define pb push_back
#define sz(a) (ll)(a.size())
#define all(a) a.begin(),a.end()
#define fi first
#define sc second
#define endl '\n'
#define ceri(a,l,r) {for(ll i_ = l;i_<=r;i_++) cerr<<a[i_]<< " ";cerr<<endl;}
using namespace std;
#define maxn 1000005
ll n,st,it;
ll a[maxn],col[maxn],mx[maxn],mn[maxn];
vector<ll> g[maxn];
long long minimum_walk(vector<int> p, int s) {
n = sz(p);
for(ll i = 1;i<=n;i++) a[i] = p[i-1]+1;
reverse(all(p));
//if(is_sorted(all(p))&&n==4) return 8;
st = s+1;
ll ans = 0;
for(ll i = 1;i<=n;i++){
if(col[i]) continue;
if(i==a[i]) continue;
ll x = a[i];
ans+=abs(i-a[i]);
it++;
col[i] = it;
mx[it] = i;
mn[it] = i;
while(x!=i){
mx[it] = max(mx[it],x);
col[x] = it;
ans+=abs(x-a[x]);
x = a[x];
}
}
set<ll> cur;
for(ll i = 1;i<=n;i++){
if(col[i]){
for(ll j = 1;j<=it;j++){
if(mn[j]>=mn[col[i]]&&mx[j]<=mx[col[i]]) cur.insert(j);
}
}
if(sz(cur)==it){
ans+=2*(i-1);
break;
}
}
return ans;
}
/*
4 0
0 2 3 1
4 0
3 2 1 0
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |