Submission #1360151

#TimeUsernameProblemLanguageResultExecution timeMemory
1360151retardeAncient Books (IOI17_books)C++20
0 / 100
1 ms344 KiB
#include "books.h"
#include <bits/stdc++.h>
using namespace std;

long long minimum_walk(vector<int> p, int s) {
	int n = (int)p.size(); assert(s == 0);
	set<pair<pair<int, int>, long long>> st;
	vector<int> done(n);
	for (int i = 0; i < n; i++) {
		if (done[i]) continue;
		long long mn = 1e18, mx = -1e18, cost = 0, cur = i;
		while (p[cur] != i) {
			mn = min(mn, cur);
			mx = max(mx, cur);
			done[cur] = 1;
			cost += abs(cur - p[cur]);
			cur = p[cur];
		}
		mn = min(mn, cur);
		mx = max(mx, cur);
		done[cur] = 1;
		cost += abs(cur - i);
		st.insert({{mn, mx}, cost});
	}

	long long ans = 0;
	int r = 0;
	for (auto &x : st) {
		pair<int, int> p = x.first;
		long long cst = x.second;
		ans += cst;
		if (p.first > r) ans += 2LL * (p.first - r);
		r = max(r, p.second); 
	}
	return ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...