Submission #1305420


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define REP(i,n) for(int i=0,_n=(int)(n);i<_n;++i)
template<class T>bool chmin(T&a,const T&b){return a>b?(a=b,true):false;}
template<class T>bool chmax(T&a,const T&b){return a<b?(a=b,true):false;}

int nextInt() { int x; scanf("%d", &x); return x;}

const int MAX_N = 100000 + 10;
int A[MAX_N];
int Aorg[MAX_N];
int B[MAX_N];
int tmp[MAX_N];

// 内部的には 1-based であるが、利用するときには 0-based な実装
struct BIT {
  int n;
  vector<ll> tree;
  BIT(int n):n(n),tree(n+1) {} 
  void fill(ll val) {
    REP(i, n+1) tree[i] = (i&-i) * val;
  }
  void add(int idx, ll val) {
    for (int x=idx+1; x<=n; x+=x&-x) tree[x] += val;
  }
  ll range(int idx) {
    ll sum=0;
    for (int x=idx+1; x>0; x-=x&-x) sum += tree[x];
    return sum;
  }
  ll range(int a, int b) {
    return range(b) - range(a - 1);
  }
};


ll count_reverse_num(int* a, int N) {
  ll ans = 0;
  BIT bit(N);
  REP(i, N) {
    ans += i - bit.range(a[i]);
    bit.add(a[i], +1);
  }
  return ans;
}

void renumber(int *A, int *T, int N) {
  REP(i, N) tmp[T[i]] = i;
  REP(i, N) A[i] = tmp[A[i]];
}
void renumber_inv(int *A, int *T, int N) {
  REP(i, N) tmp[i] = T[i];
  REP(i, N) A[i] = tmp[A[i]];
}

int main2() {
  int N = nextInt();
  REP(i, N) A[i] = nextInt() - 1;
  REP(i, N) B[i] = nextInt() - 1;
  REP(i, N) Aorg[i] = A[i];

  // renumber(A, Aorg, N);
  renumber(B, Aorg, N);

  int bb = count_reverse_num(B, N);
  if (bb % 2 == 1) {
    cout << -1 << endl;
  } else {
    bb /= 2;

    // // O(N^2) 解法
    // for (int i = 0; i < N; i++) {
    //   for (int j = N - 1; j > i; j--) {
    //     if (B[j-1] > B[j]) {
    //       swap(B[j-1], B[j]);
    //       bb--;
    //       if (bb == 0) goto BK;
    //     }
    //   }
    // }
    // BK:

    BIT bit(N+1);
    
    int sz = 0;
    for (int i = 0; i < N; i++) {
      int g = bit.range(N - B[i]);
      if (g <= bb) {
        bb -= g;
        sz++;
        bit.add(N - B[i], +1);
      } else {
        break;
      }
    }
    sort(B, B + sz);

    for (int i = 0; i < N && bb > 0; i++) {
      for (int j = N - 1; j > i && bb > 0; j--) {
        if (B[j-1] > B[j]) {
          swap(B[j-1], B[j]);
          bb--;
        }
      }
    }

    renumber_inv(B, Aorg, N);
    REP(i, N) { if (i > 0)  cout << " "; cout << (B[i] + 1); } cout << endl;
  }
  return 0;
}

int main() {
  for (;!cin.eof();cin>>ws) main2();
  return 0;
}

Submission Info

Submission Time
Task C - 転倒距離
User hs484
Language C++14 (GCC 5.4.1)
Score 30
Code Size 2577 Byte
Status WA
Exec Time 37 ms
Memory 3184 KB

Compile Error

./Main.cpp: In function ‘int nextInt()’:
./Main.cpp:9:39: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
 int nextInt() { int x; scanf("%d", &x); return x;}
                                       ^

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 30 / 30 0 / 70
Status
AC × 3
AC × 22
AC × 34
WA × 7
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 2 ms 256 KB
subtask1_02.txt AC 2 ms 384 KB
subtask1_03.txt AC 2 ms 256 KB
subtask1_04.txt AC 2 ms 256 KB
subtask1_05.txt AC 1 ms 256 KB
subtask1_06.txt AC 1 ms 256 KB
subtask1_07.txt AC 1 ms 256 KB
subtask1_08.txt AC 1 ms 256 KB
subtask1_09.txt AC 2 ms 256 KB
subtask1_10.txt AC 1 ms 256 KB
subtask1_11.txt AC 2 ms 384 KB
subtask1_12.txt AC 2 ms 256 KB
subtask1_13.txt AC 1 ms 256 KB
subtask1_14.txt AC 2 ms 256 KB
subtask1_15.txt AC 2 ms 384 KB
subtask1_16.txt AC 2 ms 384 KB
subtask1_17.txt AC 2 ms 384 KB
subtask1_18.txt AC 2 ms 384 KB
subtask1_19.txt AC 2 ms 384 KB
subtask2_01.txt AC 4 ms 640 KB
subtask2_02.txt AC 31 ms 2596 KB
subtask2_03.txt AC 37 ms 2992 KB
subtask2_04.txt AC 13 ms 1536 KB
subtask2_05.txt AC 19 ms 2048 KB
subtask2_06.txt AC 11 ms 1280 KB
subtask2_07.txt AC 20 ms 2176 KB
subtask2_08.txt AC 37 ms 2988 KB
subtask2_09.txt AC 14 ms 1536 KB
subtask2_10.txt AC 12 ms 1408 KB
subtask2_11.txt AC 17 ms 1460 KB
subtask2_12.txt WA 33 ms 3080 KB
subtask2_13.txt WA 34 ms 3184 KB
subtask2_14.txt AC 21 ms 2304 KB
subtask2_15.txt WA 34 ms 3184 KB
subtask2_16.txt WA 34 ms 3184 KB
subtask2_17.txt WA 33 ms 3184 KB
subtask2_18.txt WA 34 ms 3184 KB
subtask2_19.txt WA 34 ms 3184 KB