#include "books.h"
#include<bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int n;
int p[1000005];
int maxpref[1000005],minsuff[1000005];
long long minimum_walk(std::vector<int> cit_p, int s)
{
s++;
n = cit_p.size();
for(int i=1;i<=n;i++)
p[i] = cit_p[i-1]+1;
int ult=0,primu=n+1;
long long rez=0;
for(int i=1;i<=n;i++)
{
maxpref[i] = max(maxpref[i-1], p[i]);
if(p[i]!=i)
{
ult=i;
primu = min(primu, i);
}
rez += abs(p[i]-i);
}
minsuff[n+1] = n+1;
for(int i=n;i>0;i--)
minsuff[i] = min(minsuff[i+1], p[i]);
if(ult==0)
return 0;
ult = max(ult, s);
primu = min(primu, s);
for(int i=primu+1;i<=ult;i++)
if(maxpref[i-1]<i && minsuff[i]>=i)
rez+=2;
/*for(int i=primu+1;i<=s;i++)
{
bool gasit=0;
for(int j=1;j<i;j++)
if(i<=p[j] && p[j]<=s)
gasit=1;
for(int j=i;j<=s;j++)
if(p[j]<i)
gasit=1;
if(!gasit)
rez+=2;
}
for(int i=s+1;i<=ult;i++)
{
bool gasit=0;
for(int j=i;j<=n;j++)
if(s<=p[j] && p[j]<i)
gasit=1;
for(int j=s;j<i;j++)
if(p[j]>=i)
gasit=1;
if(!gasit)
rez+=2;
}*/
int tole=s,tori=s;
while(tole>=1 && p[tole]!=tole)
tole--;
tole++;
while(tori<=n && p[tori]!=tori)
tori++;
tori--;
//rez += 2*min(ult-s, s-primu);
rez += 2*min(ult-tori,tole-primu);
return rez;
}
# | 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... |