Submission #156409

#TimeUsernameProblemLanguageResultExecution timeMemory
156409dolphingarlicAncient Books (IOI17_books)C++14
0 / 100
2 ms376 KiB
#include "books.h"
#include <math.h>
#include <algorithm>

long long minimum_walk(std::vector<int> p, int s) {
    int n = p.size();
    long long dist = 0, ans = 0;

    int greatest = s, l = s, r = s;
    for (int i = s; ~i; i--) {
        if (p[i] != i) {
            ans += abs(p[i] - i);
            if (p[i] > s) {
                l = std::min(l, i);
                r = std::max(r, p[i]);
            }
            if (i < greatest) dist += i - greatest;
            greatest = std::min(greatest, std::min(i, p[i]));
        }
    }
    greatest = s;
    for (int i = s + 1; i < n; i++) {
        if (p[i] != i) {
            ans += abs(p[i] - i);
            if (p[i] < s) {
                l = std::min(l, p[i]);
                r = std::max(r, p[i]);
            }
            if (i > greatest) dist += i - greatest;
            greatest = std::max(greatest, std::max(i, p[i]));
        }
    }
    return ans + 2 * dist + std::min(s - l, r - s);
}
#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...