Submission #1177591


Source Code Expand

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cassert>
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,n) FOR(i,0,n)
#define rep(i,n) FOR(i,0,n)
#define DEBUG(x) cout<<#x<<": "<<x<<endl
#define vint vector<int>
#define vdouble vector<double>
#define vstring vector<string>
using namespace std;

#include<map>
#include<set>
#include<queue>

typedef long long ll;
typedef unsigned long long ull;

const int MAX_N = 1000000;
int N;

int A[100000], B[100000], M[100000], BB[100000], M2[100000];
ll ct;

void merge(int n[], int left, int mid, int right, ll mx)
{
    int num = right - left;
    int *tmp = new int[num];

    int iw = 0;
    int il = left;
    int ir = mid;

    while (il < mid && ir < right)
    {
        ll ctp = mid - il;
        if (n[il] <= n[ir] || mx < ct + ctp)
        {
            tmp[iw++] = n[il++];
        }
        else
        {
            tmp[iw++] = n[ir++];
            ct += ctp;
        }
    }

    while (il < mid) tmp[iw++] = n[il++];
    while (ir < right) tmp[iw++] = n[ir++];

    for (int i=0; i<num; i++) n[left + i] = tmp[i];

    delete[] tmp;

}


void merge_sort_sub(int n[], int left, int right, ll mx)
{
    if (right - left <= 1) return;

    int mid = left + (right - left) / 2;
    merge_sort_sub(n, left, mid, mx);
    merge_sort_sub(n, mid, right, mx);
    merge(n, left, mid, right, mx);

}

int main() {
    cin >> N;
    rep(i, N){ cin >> A[i]; A[i]--; }
    rep(i, N){ cin >> B[i]; B[i]--; }

    // mapping
    rep(i, N){ M[A[i]] = i; }
    rep(i, N){ M2[M[i]] = i; }

    rep(i, N){ A[i] = M[A[i]]; }
    rep(i, N){ B[i] = M[B[i]]; }
    rep(i, N){ BB[i] = B[i];}

    cerr << "M : "; rep(i, N){ cerr << M[i] << " ";} cerr << endl;
    cerr << "M2: "; rep(i, N){ cerr << M2[i] << " ";} cerr << endl;
    cerr << "AM: "; rep(i, N){ cerr << A[i] << " ";} cerr << endl;
    cerr << "BM: "; rep(i, N){ cerr << B[i] << " ";} cerr << endl;
    cerr << "A : "; rep(i, N){ cerr << M2[A[i]]+1 << " ";} cerr << endl;
    cerr << "B : "; rep(i, N){ cerr << M2[B[i]]+1 << " ";} cerr << endl;

    ct = 0;
    merge_sort_sub(BB, 0, N, INT64_MAX);
    ll cross = ct;
    cerr << "cross:" << cross << endl;

    if(cross %2 != 0) {cout << -1 << endl; return 0;}

    ct = 0;
    merge_sort_sub(B, 0, N, cross/2);

    cerr << "BH: ";
    rep(i, N){ cerr << B[i] << " ";}
    cerr << endl;


    // answer
    rep(i, N){ cout << M2[B[i]]+1 << " ";} cout << endl;
}

Submission Info

Submission Time
Task C - 転倒距離
User threecourse
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2586 Byte
Status AC
Exec Time 663 ms
Memory 3124 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 30 / 30 70 / 70
Status
AC × 3
AC × 22
AC × 41
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
Subtask1 sample_01.txt, sample_02.txt, sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt
Subtask2 sample_01.txt, sample_02.txt, sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt, subtask2_15.txt, subtask2_16.txt, subtask2_17.txt, subtask2_18.txt, subtask2_19.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
sample_03.txt AC 1 ms 256 KB
subtask1_01.txt AC 14 ms 384 KB
subtask1_02.txt AC 19 ms 384 KB
subtask1_03.txt AC 10 ms 256 KB
subtask1_04.txt AC 9 ms 256 KB
subtask1_05.txt AC 9 ms 256 KB
subtask1_06.txt AC 2 ms 256 KB
subtask1_07.txt AC 7 ms 256 KB
subtask1_08.txt AC 2 ms 256 KB
subtask1_09.txt AC 16 ms 384 KB
subtask1_10.txt AC 7 ms 256 KB
subtask1_11.txt AC 17 ms 384 KB
subtask1_12.txt AC 11 ms 256 KB
subtask1_13.txt AC 8 ms 256 KB
subtask1_14.txt AC 16 ms 384 KB
subtask1_15.txt AC 18 ms 384 KB
subtask1_16.txt AC 20 ms 384 KB
subtask1_17.txt AC 18 ms 384 KB
subtask1_18.txt AC 21 ms 384 KB
subtask1_19.txt AC 21 ms 384 KB
subtask2_01.txt AC 80 ms 640 KB
subtask2_02.txt AC 504 ms 2488 KB
subtask2_03.txt AC 608 ms 2916 KB
subtask2_04.txt AC 299 ms 1664 KB
subtask2_05.txt AC 420 ms 2156 KB
subtask2_06.txt AC 247 ms 1408 KB
subtask2_07.txt AC 445 ms 2272 KB
subtask2_08.txt AC 612 ms 2908 KB
subtask2_09.txt AC 304 ms 1664 KB
subtask2_10.txt AC 275 ms 1536 KB
subtask2_11.txt AC 278 ms 1496 KB
subtask2_12.txt AC 539 ms 2752 KB
subtask2_13.txt AC 652 ms 3124 KB
subtask2_14.txt AC 478 ms 2388 KB
subtask2_15.txt AC 657 ms 3124 KB
subtask2_16.txt AC 659 ms 3124 KB
subtask2_17.txt AC 654 ms 3124 KB
subtask2_18.txt AC 663 ms 3124 KB
subtask2_19.txt AC 653 ms 3124 KB