#include<iostream>
#include<vector>
#include "books.h"
using namespace std;
const int MAX_N=1e6+6;
int col[MAX_N];
int cols;
int a[MAX_N];
int l[MAX_N];
int r[MAX_N];
int n;
long long ans;
long long minimum_walk(std::vector<int> p, int s)
{
n=p.size();
s++;
for(int i=1;i<=n;i++)
{
l[i]=1e9;
r[i]=-1;
a[i]=p[i-1]+1;
}
///init stuff
for(int i=1;i<=n;i++)
{
ans+=abs(i-a[i]);
if(col[i]==0)
{
if(i!=s && i==a[i])continue;
cols++;
int pos=i;
while(col[pos]==0)
{
l[cols]=min(l[cols],pos);
r[cols]=max(r[cols],pos);
col[pos]=cols;
pos=a[pos];
}
}
}
vector<int>sep;
bool has=0;
int active=0;
for(int i=1;i<=n;i++)
{
if(has && active==0)
{
sep.push_back(i-1);
}
int curcol=col[i];
if(l[curcol]==i)
{
has=1;
active++;
}
if(r[curcol]==i)active--;
}
if(sep.size()==0)return ans;
///cycle stuff
for(int i=sep.size()-2;i>=0;i--)
{
if(sep[i]>=s)ans+=2;
}
///right part
for(int i=0;i<sep.size();i++)
{
//cout<<sep[i]<<" ";
//cout<<"\n";
if(sep[i]<s)ans+=2;
}
///left part
return ans;
}
# | 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... |