제출 #207250

#제출 시각아이디문제언어결과실행 시간메모리
207250oscarsierra12정렬하기 (IOI15_sorting)C++14
74 / 100
1008 ms19952 KiB
#include "sorting.h"
#include <bits/stdc++.h>

#define ff      first
#define ss      second
#define pb      push_back

using namespace std ;

typedef long long      ll ;
typedef pair<int,int>  ii ;

const int n = 200010 ;

int prv[n], nxt[n] ;
int ind[n], ele[n] ;
int rind[n] ;

int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
    for ( int i = 0 ; i < N ; ++i )
        rind[S[i]] = i ;
    for ( int i = 0 ; i <= M ; ++i ) {
        for ( int j = 0 ; j < N ; ++j ) prv[j] = nxt[j] = j ;
        for ( int j = 0 ; j < i ; ++j ) {
            int A = prv[X[j]] ;
            int B = prv[Y[j]] ;
            nxt[A] = Y[j] ;
            prv[Y[j]] = A ;
            nxt[B] = X[j] ;
            prv[X[j]] = B ;
        }
        for ( int j = 0 ; j < N ; ++j ) {
            ele[j] = S[prv[j]] ;
            ind[S[prv[j]]] = j ;
        }
        vector <ii> swaps ;
        for ( int j = 0 ; j < N ; ++j ) {
            if ( ele[j] == j ) continue ;
            swaps.pb ({rind[ele[j]], rind[ele[ind[j]]]}) ;
            ind[ele[j]] = ind[j] ;
            swap (ele[j], ele[ind[j]]) ;
        }
        if ( swaps.size() % 2 != i % 2 ) swaps.pb ({0,0}) ;
        for ( int j = 0 ; j < N ; ++j ) prv[j] = nxt[j] = j ;
        int id = 0 ;
        for ( int j = 0 ; j < i ; ++j ) {
            int A = prv[X[j]] ;
            int B = prv[Y[j]] ;
            nxt[A] = Y[j] ;
            prv[Y[j]] = A ;
            nxt[B] = X[j] ;
            prv[X[j]] = B ;
            if ( id < swaps.size() ) {
                P[j] = nxt[swaps[id].ff] ;
                Q[j] = nxt[swaps[id].ss] ;
            }
            else {
                P[j] = X[j] ;
                Q[j] = Y[j] ;
            }
            A = prv[P[j]] ;
            B = prv[Q[j]] ;
            nxt[A] = Q[j] ;
            prv[Q[j]] = A ;
            nxt[B] = P[j] ;
            prv[P[j]] = B ;
            id++ ;
        }
        if ( swaps.size() <= i ) return i ;
    }
}

컴파일 시 표준 에러 (stderr) 메시지

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:43:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if ( swaps.size() % 2 != i % 2 ) swaps.pb ({0,0}) ;
              ~~~~~~~~~~~~~~~~~^~~~~~~~
sorting.cpp:53:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if ( id < swaps.size() ) {
                  ~~~^~~~~~~~~~~~~~
sorting.cpp:69:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if ( swaps.size() <= i ) return i ;
              ~~~~~~~~~~~~~^~~~
sorting.cpp:71:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...