Submission #69618

#TimeUsernameProblemLanguageResultExecution timeMemory
69618aquablitz11Ancient Books (IOI17_books)C++14
0 / 100
3 ms496 KiB
#include <bits/stdc++.h>
#include "books.h"
using namespace std;

using ll = long long;
using pll = pair<ll, ll>;
const ll INF = 1e9;

ll minimum_walk(vector<int> p, int s)
{
    int n = p.size();
    vector<pll> li;
    ll dist = 0;
    for (int i = 0; i < n; ++i) {
        if (p[i] == -1) continue;
        int u = i, cnt = 0;
        ll l = -INF, r = INF;
        do {
            ++cnt;
            if (u <= s) l = max(l, (ll)u);
            if (u >= s) r = min(r, (ll)u);
            int v = p[u];
            dist += abs(u-v);
            p[u] = -1;
            u = v;
        } while (u != i);
        if (cnt > 1)
            li.emplace_back(s-l, r-s);
    }
    sort(li.begin(), li.end());
    ll mx = 0, ans = INF*INF;
    for (int i = li.size()-1; i >= 0; --i) {
        ans = min(ans, li[i].first + mx);
        mx = max(mx, li[i].second);
    }
    ans = min(ans, mx);

	return dist+2*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...