| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 385051 | qpwoeirut | Sorting (IOI15_sorting) | C++17 | 2 ms | 748 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "sorting.h"
#include <algorithm>
#include <cassert>
#include <iostream>
using namespace std;
#define val first
#define idx second
typedef pair<int,int> pii;
const int MN = 200005;
pii A[MN];
int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
    if (is_sorted(S, S+N)) return 0;
    int K = 0;
    if (X[0] == 0 && Y[0] == 0) {
        for (int i=0; i<N; ++i) {
            int idx = min_element(S+i, S+N) - S;
            if (idx == i) continue;
            P[K] = i;
            Q[K] = idx;
            ++K;
            swap(S[i], S[idx]);
        }
    } else if (X[0] == 0 && Y[0] == 1) {
        for (int i=2; i<N; ++i) {
            int idx = min_element(S+i, S+N) - S;
            if (idx == i) continue;
            swap(S[0], S[1]);
            P[K] = i;
            Q[K] = idx;
            ++K;
            swap(S[i], S[idx]);
        }
        //for (int i=0; i<N; ++i) { cerr << S[i] << ' '; } cerr << endl;
        while (N > 2 && S[0] + S[1] > 1) {
            swap(S[0], S[1]);
            if (S[0] < S[1]) {
                P[K] = 1;
                swap(S[1], S[2]);
            } else {
                P[K] = 0;
                swap(S[0], S[2]);
            }
            Q[K] = 2;
            ++K;
            for (int i=2; i+1<N; ++i) {
                if (S[i] > S[i+1]) {
                    swap(S[0], S[1]);
                    swap(S[i], S[i+1]);
                    P[K] = i;
                    Q[K] = i+1;
                    ++K;
                } else break;
            }
        }
        swap(S[0], S[1]);
        if (S[0] == 1) {
            assert(S[1] == 0);
            P[K] = 0;
            Q[K] = 0;
            ++K;
            swap(S[0], S[1]);
        }
    } else assert(0);
    //for (int i=0; i<N; ++i) { cerr << S[i] << ' '; } cerr << endl;
    assert(is_sorted(S, S+N));
    assert(K <= M);
    return K;
}
Compilation message (stderr)
| # | 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... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
