Submission #399759

#TimeUsernameProblemLanguageResultExecution timeMemory
399759LucaDantasAncient Books (IOI17_books)C++17
12 / 100
1 ms332 KiB
#include "books.h"
#include <cassert>

struct Par
{
	int l, r;
};

int abs(int x) { return x < 0 ? -x : x; }

std::vector<Par> segmentos;

long long minimum_walk(std::vector<int> p, int s) {
	assert(!s);
	int n = (int)p.size();
	long long ans = 0;
	int prim = n+1;
	for(int i = 0, ini = 0, fim = 0; i < n; i++) {
		if(p[i] == i) { ++ini; continue; }
		prim = std::min(prim, i);
		fim = std::max(fim, p[i]);
		ans += abs(p[i] - i);
		if(fim == i)
			segmentos.push_back({ini, fim}), ini = i+1;
	}
	for(int i = 0; i < ((int)segmentos.size()) - 1; i++)
		ans += 2*(segmentos[i+1].l - segmentos[i].r);
	if(prim < n) ans += prim<<1;
	return ans;
}
#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...