Submission #299752

#TimeUsernameProblemLanguageResultExecution timeMemory
299752errorgornAncient Books (IOI17_books)C++14
50 / 100
201 ms20328 KiB
#include "books.h"

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ii pair<int,int>
#define fi first
#define se second

#define rep(x,s,e) for (auto x=(s)-((s)>(e));x!=(e)-((s)>(e));((s)<(e)?x++:x--))
#define all(x) (x).begin(),(x).end()
#define sz(x) (int) (x).size()

int n;
vector<int> arr;

int fwd[1000005];
vector<int> imp;

long long minimum_walk(std::vector<int> p, int s) {
	n=sz(p);
	arr=p;
	
	rep(x,0,n){
		if (x<arr[x]){
			fwd[x]++,fwd[arr[x]]--;
			imp.push_back(x);
			imp.push_back(arr[x]);
		}
	}
	
	if (imp.empty()) return 0;
	
	rep(x,0,n) fwd[x+1]+=fwd[x];
	
	int l=0,r=n-1;
	while (fwd[l]==0) l++;
	while (fwd[r]==0) r--;
	
	ll ans=1e9;
	for (auto &it:imp) ans=min(ans,(ll)abs(s-it));
	
	rep(x,l,r+1){
		ans+=max(fwd[x],1);
	}
	
	return ans*2;
}
#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...