Submission #759478

#TimeUsernameProblemLanguageResultExecution timeMemory
759478boris_mihovAncient Books (IOI17_books)C++17
50 / 100
102 ms23860 KiB
#include "books.h"
#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>

typedef long long llong;
const int MAXN = 1000000 + 10;
const int INF  = 1e9;

int n, s;
int p[MAXN];
int add[MAXN];
bool vis[MAXN];

llong minimum_walk(std::vector <int> P, int S) 
{
    llong ans = 0;
    n = P.size(); s = S + 1;
    for (int i = 1 ; i <= n ; ++i)
    {
        p[i] = P[i - 1] + 1;
        ans += abs(i - p[i]);
    }

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

        int curr = i;
        int currMax = i;
        while (!vis[curr])
        {
            vis[curr] = true;
            currMax = std::max(currMax, curr);
            curr = p[curr];
        }

        add[i]++;
        add[currMax]--;
        max = std::max(max, currMax);
    }

    int balance = 0;
    for (int i = 1 ; i < max ; ++i)
    {
        balance += add[i];
        if (balance == 0)
        {
            ans += 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...