Submission #559689

#TimeUsernameProblemLanguageResultExecution timeMemory
559689nonsensenonsense1Ancient Books (IOI17_books)C++17
50 / 100
113 ms15840 KiB
#include "books.h"
#include <cassert>
#include <cstdlib>

const int N = 1000000;
int n;
bool u[N];

long long minimum_walk(std::vector<int> p, int s) {
	long long ans = 0;
	n = (int)p.size();
	int mx = -1, come = ~(1 << 31);
	for (int i = 0; i < n; ++i) if (p[i] != i) {
		come = std::min(come, abs(i - s));
		if (!u[i]) {
			if (i > mx && mx != -1) {
				if (s > mx && s < i) come = 0;
				ans += i - mx << 1;
			}
			int cur = i;
			do {
				ans += abs(cur - p[cur]);
				mx = std::max(mx, cur);
				u[cur] = 1;
				cur = p[cur];
			} while (cur != i);
		}
	}
	if (mx == -1) return 0;
	return ans + come * 2;
}

Compilation message (stderr)

books.cpp: In function 'long long int minimum_walk(std::vector<int>, int)':
books.cpp:18:14: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   18 |     ans += i - mx << 1;
      |            ~~^~~~
#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...