Submission #60173

# Submission time Handle Problem Language Result Execution time Memory
60173 2018-07-23T20:13:51 Z Flugan42 Sorting (IOI15_sorting) C++14
0 / 100
4 ms 512 KB
#include "sorting.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<ll> vi;
typedef pair<ll,ll> ii;
typedef vector<ii> vii;
#define rep(i,a,b) for(int i = a; i < b; i++)
#define per(i,a,b) for(int i = a; i >= b; i--)
#define inf 9223372036854775807
#define all(x) x.begin(),x.end()
#define sz(x) (ll)(x).size()
#define trav(a,x) for(auto& a : x)

int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
  ll lo = -1, hi = N, mid;
  while (lo+1 < hi){
    mid = (lo+hi)/2;
    vi last; last.assign(N,0);
    rep(i,0,N) last[i] = S[i];
    rep(i,0,mid){
      ll t1 = last[X[i]];
      ll t2 = last[Y[i]];
      last[Y[i]] = t1;
      last[X[i]] = t2;
    }
    vi inv; inv.assign(N,0);
    rep(i,0,N) inv[last[i]] = i;
    ll cur = 0;
    rep(i,0,mid){
      while (cur < N && inv[cur] == cur) cur++;
      if (cur == N) break;
      ll s = last[cur],ls = inv[cur];
      last[ls] = s;
      last[cur] = cur;
      inv[cur] = cur;
      inv[s] = ls;
    }
    if (inv[N-1] != N-1) {
      lo = mid;
    } else {
      hi = mid;
    }
  }
  vi last; last.assign(N,0);
  rep(i,0,N) last[i] = S[i];
  rep(i,0,hi){
    ll t1 = last[X[i]];
    ll t2 = last[Y[i]];
    last[Y[i]] = t1;
    last[X[i]] = t2;
  }
  vi inv; inv.assign(N,0);
  rep(i,0,N) inv[last[i]] = i;
  ll cur = 0;
  vii swap;
  rep(i,0,hi){
    while (cur < N && inv[cur] == cur) cur++;
    if (cur == N) break;
    ll s = last[cur],ls = inv[cur];
    swap.push_back(make_pair(s,cur));
    last[ls] = s;
    last[cur] = cur;
    inv[cur] = cur;
    inv[s] = ls;
  }
  while (sz(swap) < hi) swap.push_back(make_pair(0,0));
  last.assign(N,0);
  inv.assign(N,0);
  rep(i,0,N) last[i] = S[i];
  rep(i,0,N) inv[last[i]] = i;
  rep(i,0,hi){
    ll t1 = last[X[i]];
    ll t2 = last[Y[i]];
    last[Y[i]] = t1;
    last[X[i]] = t2;
    inv[t1] = Y[i];
    inv[t2] = X[i];
    //
    P[i] = inv[swap[i].first];
    Q[i] = inv[swap[i].second];
    last[P[i]] = swap[i].second;
    last[Q[i]] = swap[i].first;
    inv[swap[i].first] = Q[i];
    inv[swap[i].second] = P[i];
  }
	return hi;
}

Compilation message

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:81:29: warning: conversion to 'int' from '__gnu_cxx::__alloc_traits<std::allocator<long long int> >::value_type {aka long long int}' may alter its value [-Wconversion]
     P[i] = inv[swap[i].first];
                             ^
sorting.cpp:82:30: warning: conversion to 'int' from '__gnu_cxx::__alloc_traits<std::allocator<long long int> >::value_type {aka long long int}' may alter its value [-Wconversion]
     Q[i] = inv[swap[i].second];
                              ^
sorting.cpp:88:9: warning: conversion to 'int' from 'll {aka long long int}' may alter its value [-Wconversion]
  return hi;
         ^~
sorting.cpp:16:39: warning: unused parameter 'M' [-Wunused-parameter]
 int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
                                       ^
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Incorrect 3 ms 384 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Incorrect 3 ms 384 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 3 ms 256 KB Output is correct
3 Incorrect 2 ms 384 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Incorrect 3 ms 384 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 512 KB Output is correct
2 Correct 3 ms 512 KB Output is correct
3 Incorrect 4 ms 512 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 512 KB Output is correct
2 Correct 3 ms 512 KB Output is correct
3 Incorrect 4 ms 512 KB Output isn't correct
4 Halted 0 ms 0 KB -