Submission #1104917

#TimeUsernameProblemLanguageResultExecution timeMemory
1104917alexander707070Ancient Books (IOI17_books)C++14
22 / 100
94 ms22380 KiB
#include<bits/stdc++.h>
#define MAXN 1000007
using namespace std;

int n,s,p[MAXN],ans,last,mins,maxs,pref[MAXN],curr;
bool li[MAXN];

void dfs(int x){
	li[x]=true;

	ans+=abs(x-p[x]);
	mins=min(mins,x);
	maxs=max(maxs,x);

	if(!li[p[x]])dfs(p[x]);
}

long long minimum_walk(vector<int> P, int S){
	n=int(P.size()); s=S+1;

	for(int i=1;i<=n;i++){
		p[i]=P[i-1]+1;
	}

	for(int i=1;i<=n;i++){
		if(!li[i]){
			if(p[i]!=i)last=i;
			mins=n; maxs=1;
			dfs(i);

			pref[mins]++; pref[maxs]--;
		}
	}

	for(int i=1;i<=n-1;i++){
		curr+=pref[i];
		if(curr==0 and last>i)ans+=2;
	}

	return ans;
}

/*int main(){

	cout<<minimum_walk({0, 2, 3, 1}, 0)<<"\n";

	return 0;
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...