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;
#define fi first
#define se second
#define pb push_back
#define ll long long
long long minimum_walk(std::vector<int> p, int s){
int n=p.size();ll res=0;
ll a[n+10]={0};
bool was[n+10]={0};
int ctdobri=0;
for(int i=0;i<n;i++){
if(was[i]==true) continue;
int j=p[i],ct=abs(p[i]-i);
while(j!=i){
ct+=abs(p[j]-j);
was[j]=true;
j=p[j];
}
/*j=p[i];
while(j!=i){
a[j]=ct;
j=p[j];
}*/
a[i]=ct;
}
for(int i=0;i<n;i++){
was[i]=false;
}
int nesto=-10;
for(int i=n-1;i>=0;i--){
if(p[i]!=i) {nesto=i;break;}
}
//for(int i=0;i<n;i++) printf("%lld ",a[i]);
//printf("\n");
for(int i=0,maks=-1;i<n;i++){
res++;
if(maks>=i) res--;
//printf("%i: %lld %i\n",i,res,maks);
if(was[i]==true) continue;
ctdobri++;
was[i]=true;
int j=p[i];
maks=max(maks,i);
while(j!=i){
maks=max(maks,j);
ctdobri++;
was[j]=true;
j=p[j];
}
while(maks+1<n && p[maks+1]==maks+1) maks++;
res+=a[i];
//printf("%i: %lld %i\n",i,res,maks);
if(maks==nesto) {res+=i;maks=n;}
}
res--;
/*for(int i=0;i<n;i++){
int j=i;
int trenutni=p[i];
while(1){
if(trenutni==j){
trenutni=p[j];
p[j]=j;
if(j==i) break;
}
res++;
if(trenutni>j) j++;
else j--;
}
p[j]=trenutni;
p[i]=i;
//res+=2*(j-i);
res++;
//for(int k=0;k<n;k++) printf("%i ",p[k]);
//printf("\n");
bool sortirano=true;
for(int k=1;k<n;k++){
if(p[k-1]>p[k]) sortirano=false;
}
if(sortirano) break;
res++;
}
res--;*/
return res;
}
# | 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... |