Submission #109505

#TimeUsernameProblemLanguageResultExecution timeMemory
109505JustasZAncient Books (IOI17_books)C++14
50 / 100
317 ms85128 KiB
#include "books.h"
#include <bits/stdc++.h>
#define pb push_back
#define x first
#define y second
#define all(a) a.begin(), a.end()
#define sz(a) (int)a.size()
#define rd() abs((int)rng())
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
const int maxn = 1e6 + 100;
const int mod = 1e9 + 7;
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
int n, s, val[maxn], nxt, L[maxn], R[maxn];
ll base, add;
vector<int>p;
ll minimum_walk(vector<int>perm, int S)
{
    p = perm;
    s = S;
    n = sz(p);
    for(int i = 1; i <= n; i++)
        L[i] = mod, R[i] = -mod;
    while(n > 0 && p[n - 1] == n - 1)
        --n;
    for(int i = 0; i < n; i++)
    {
        if(val[i] == 0)
        {
            int col = ++nxt, cur = i;
            while(val[cur] == 0)
            {
                val[cur] = col;
                L[col] = min(L[col], cur);
                R[col] = max(R[col], cur);
                base += abs(p[cur] - cur);
                cur = p[cur];
            }
        }
    }
    vector<int>ends[n];
    for(int i = 1; i <= nxt; i++)
    {
        ends[L[i]].pb(+1);
        ends[R[i]].pb(-1);
    }
    int open = 0;
    for(int i = 0; i < n; i++)
    {
        for(int d : ends[i])
            open += d;
        if(i != n - 1 && open == 0)
            add++;
    }
    return base + add * 2;
}
/*int main()
{
    ios_base::sync_with_stdio(false), cin.tie(0);
    vector<int>perm;
    ifstream fin("in.txt");
    int n, s;
    fin >> n >> s;
    perm.resize(n);
    for(int i = 0; i < n; i++)
        fin >> perm[i];
    cout << minimum_walk(perm, s) << endl;
    return 0;
}*/
#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...