Submission #920987

#TimeUsernameProblemLanguageResultExecution timeMemory
920987siewjhAncient Books (IOI17_books)C++17
0 / 100
1 ms348 KiB
#include "books.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll minimum_walk(vector<int> p, int s) {
	int nums = p.size();
	vector<int> cyc(nums, -1);
	ll ans = 0;
	int mn = s, mx = s;
	vector<pair<int, int>> ranges;
	for (int i = 0; i < nums; i++)
		if (cyc[i] == -1){
			int curr = i, cmn = i, cmx = i;
			do{
				ans += abs(curr - p[curr]);
				cyc[curr] = i;
				cmn = min(cmn, curr);
				cmx = max(cmn, curr);
				curr = p[curr];
			} while (curr != i);
			ranges.push_back({cmn, cmx});
			if (p[i] != i){
				mn = min(mn, cmn);
				mx = max(mx, cmx);
			}
		}
	sort(ranges.begin(), ranges.end());
	int cmx = mn;
	ll cnt = 0;
	for (auto &[l, r] : ranges){
		if (l < mn) continue;
		if (l > mx) break;
		if (l != r || r > cmx) cnt++;
		cmx = max(cmx, r);
	}
	return ans + (cnt - 1) * 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...