이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |