#include "books.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll minimum_walk(vector<int> p, int s){
	int n = p.size();
	int li = s, ri = s;
	for (int i=0; i<s; i++){
		if (p[i] != i){ li = i; break; }
	}
	for (int i=n-1; i>s; i--){
		if (p[i] != i){ ri = i; break; }
	}
	s -= li;
	vector<int> np;
	for (int i=li; i<=ri; i++) np.push_back(p[i]-li);
	p = np;
	n = p.size();
	vector<int> cl(n, -1), cr(n, -1);
	ll res = 0;
	for (int i=0; i<n; i++){
		if (cl[i] != -1) continue;
		int lm = i, rm = i;
		int cur = i;
		while (cl[cur] == -1){
			lm = min(lm, cur);
			rm = max(rm, cur);
			cl[cur] = -2;
			res += abs(p[cur]-cur);
			cur = p[cur];
		}
		while (cl[cur] == -2){
			cl[cur] = lm;
			cr[cur] = rm;
			cur = p[cur];
		}
	}
	int l = s, r = s, pl = cl[s], pr = cr[s];
	while (l != 0 || r != n-1){
		while (l != pl || r != pr){
			if (l != pl){
				l--;
				pl = min(pl, cl[l]);
				pr = max(pr, cr[l]);
			}
			if (r != pr){
				r++;
				pl = min(pl, cl[r]);
				pr = max(pr, cr[r]);
			}
		}
		if (r != n-1){
			res += 2;
			r++;
			pl = min(pl, cl[r]);
			pr = max(pr, cr[r]);
		}
	}
	return res;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |