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 |
|
|
|
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 |