제출 #705784

#제출 시각아이디문제언어결과실행 시간메모리
705784Abrar_Al_Samit고대 책들 (IOI17_books)C++17
50 / 100
129 ms15848 KiB
#include <bits/stdc++.h>
using namespace std;

const int nax = 1e6;
bool vis[nax];
int n;
long long minimum_walk(vector<int>p, int s) {
	long long ans = 0;
	n = p.size();

	for(int i=0; i<n; ++i) {
		if(vis[i]) continue;
		if(i==p[i]) continue;

		int j = i;
		while(1) {
			if(vis[j]) break;
			vis[j] = 1;
			ans += abs(j-p[j]);
			j = p[j];
		}
	}
	int lst = n;
	while(lst-1>=0 && p[lst-1]==lst-1) --lst;

	int fur = -1;
	int cnt = 0;
	memset(vis, 0, sizeof vis);
	for(int i=0; i<lst; ++i) if(!vis[i]) {
		if(i>fur) {
			++cnt;
		}
		int j = i;
		while(1) {
			if(vis[j]) break;
			vis[j] = true;
			fur = max(j, fur);
			j = p[j];
		}
	}
	ans += max(0, cnt-1) * 2;
	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...