Submission #299341

# Submission time Handle Problem Language Result Execution time Memory
299341 2020-09-14T18:01:41 Z Hideo Sorting (IOI15_sorting) C++17
Compilation error
0 ms 0 KB
//#include "sorting.h"
#include "grader.cpp"
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define all(s) s.begin(), s.end()
#define pb push_back
#define fr first
#define sc second
#define vi vector < int >
#define pi pair < int, int >

const int MN = 3e5 + 7;

vector < pi > sw, out;
int a[MN], b[MN], r[MN];
int x[MN], y[MN];
int n, m;

bool check (int k){
    for (int i = 0; i < n; i++)
        a[i] = b[i];
    for (int i = 0; i < k; i++)
        swap(a[x[i]], a[y[i]]);
    queue < pi > q;
    for (int i = 0; i < n; i++)
        r[a[i]] = i;
    for (int i = 0; i < n; i++)
        if (a[a[i]] == i)
            q.push({i, a[i]});
    int l = 0, cnt = 0;
    vector < pi > kek;
    while (l < n){
        while (!q.empty()){
            int v = q.front().fr, u = q.front().sc;
            q.pop();
            if (r[v] == v)
                continue;

            kek.pb({v, u});
            swap(a[v], a[u]);
            swap(r[a[v]], r[a[u]]);
            cnt++;
        }
        if (r[l] != l){
            int v = l, u = r[l];
            kek.pb({v, a[v]});
            swap(a[v], a[u]);
            swap(r[a[v]], r[a[u]]);
            if (a[a[u]] == u)
                q.push({u, a[u]});
            cnt++;
        }
        l++;
    }
    if (cnt <= k)
        sw = kek;
    return cnt <= k;
}

void simulate (int k){
    while (sw.size() != k)
        sw.pb({0, 0});
    for (int i = 0; i < n; i++){
        a[i] = b[i];
        r[a[i]] = i;
    }
    for (int i = 0; i < k; i++){
        swap(a[x[i]], a[y[i]]);
        swap(r[a[x[i]]], r[a[y[i]]]);
        int v = r[sw[i].fr], u = r[sw[i].sc];
        out.pb({v, u});
        swap(a[v], a[u]);
        swap(r[a[v]], r[a[u]]);
    }
}

int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
    n = N; m = M;
    bool sorted = true;
    for (int i = 0; i < n; i++){
        b[i] = S[i];
        if (b[i] != i)
            sorted = false;
    }
    if (sorted)
        return 0;
    for (int i = 0; i < m; i++){
        x[i] = X[i];
        y[i] = Y[i];
    }
    int lf = 0, rg = M;
    while (lf + 1 < rg){
        int mid = (lf + rg) >> 1;
        if (check(mid))
            rg = mid;
        else
            lf = mid;
    }
    for (int i = max(1, rg - 10); i < rg; i++){
        if (check(i))
            rg = i;
    }
    simulate(rg);
    for (int i = 0; i < out.size(); i++){
        P[i] = out[i].fr;
        Q[i] = out[i].sc;
    }
    return rg;
}

Compilation message

sorting.cpp:2:10: fatal error: grader.cpp: No such file or directory
    2 | #include "grader.cpp"
      |          ^~~~~~~~~~~~
compilation terminated.