Submission #114021

#TimeUsernameProblemLanguageResultExecution timeMemory
114021faustaadpAncient Books (IOI17_books)C++17
12 / 100
22 ms384 KiB
#include "books.h"
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
ll n,i,b[1010101],ka[1010101],R,j;
ll K[1010101];
ll nx[1010101];
void dfs(ll aa)
{
	b[aa]=1;
	R=max(R,aa);
	if(!b[nx[aa]])
		dfs(nx[aa]);
}
long long minimum_walk(std::vector<int> x, int s) 
{
	n=x.size();
	ll jaw=0;
	for(i=0;i<n;i++)nx[i]=x[i];
	for(i=0;i<n;i++)jaw+=abs(i-x[i]);
	ll tam=0;
	for(i=0;i<n;i++)
	{
		if(b[i])continue;
		R=0;
		dfs(i);
		ka[i]=R;
	}
	for(i=0;i<n;i++)
	{
		R=ka[i];
		j=i;
		while(j<R)
		{
			j++;
			R=max(R,ka[j]);
		}
		K[i]=j;
		i=j;
	}
	for(i=0;i<n;i++)
		if(K[i]<=i)
			continue;
		else
		{
			tam=i*2;
			i=K[i];
		}
//	cout<<jaw<<" "<<tam<<"\n";
	return jaw+tam;
}
#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...