Submission #43629

#TimeUsernameProblemLanguageResultExecution timeMemory
43629faustaadpAncient Books (IOI17_books)C++14
0 / 100
2 ms532 KiB
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
#include "books.h"
ll n,i,nx[101010],has,tam,kan[101010];
ll b[101010],ma;
void dfs(ll aa)
{
	ma=max(ma,aa);
	b[aa]=1;
	if(!b[nx[aa]])
		dfs(nx[aa]);
	has+=abs(aa-nx[aa]);
}
void dfs2(ll aa)
{
	b[aa]=2;
	if(b[nx[aa]]!=2)
		dfs2(nx[aa]);
	kan[aa]=ma;
}
long long minimum_walk(std::vector<int> p, int s) {
	n=p.size();
	for(i=0;i<n;i++)
	{
		if(p[i]==i)
			b[i]=1;
		else
			nx[i]=p[i];
	}
	for(i=0;i<n;i++)
	{
		if(!b[i])
		{
			ma=0;
			dfs(i);
			dfs2(i);
		}
	}
	ll hv=0;
	for(i=0;i<n;i++)
	{
		if(i>hv)
			has+=2;
		hv=max(kan[i],hv);
	}
	return has;
}
#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...