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"
#include <bits/stdc++.h>
using namespace std;
typedef long long int lld;
lld n;
lld minimum_walk(vector<int> p, int s){
n = (lld) p.size();
lld ans = 0;
for(lld i=0;i<n;i++) ans+=abs(p[i]-i);
vector<bool> vis(n, false);
vector<vector<lld>> cycles;
vector<pair<lld,lld>> evs;
for(lld i=0;i<n;i++){
if(!vis[i]){
vector<lld> tmp;
lld x = i;
while(true){
if(vis[x]) break;
tmp.push_back(x);
vis[x] = true;
x = p[x];
}
cycles.push_back(tmp);
sort(tmp.begin(), tmp.end());
evs.push_back({tmp[0], 0});
evs.push_back({*tmp.rbegin(), 1});
}
}
sort(evs.begin(), evs.end());
lld op = 0;
vector<lld> newcycle;
for(lld i=0;i<(lld)evs.size();i++){
if(evs[i].second==0){
if(op==0) newcycle.push_back(evs[i].first);
op++;
}else{
op--;
}
}
return ans+2*((lld)newcycle.size()-1);
}
# | 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... |