# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
984976 | 2024-05-17T08:52:44 Z | LucaIlie | 정렬하기 (IOI15_sorting) | C++17 | 2 ms | 2664 KB |
#include "sorting.h" #include <bits/stdc++.h> using namespace std; const int MAX_N = 2e5; int t[MAX_N], perm[MAX_N], vis[MAX_N], pos[MAX_N]; vector<pair<int, int>> sol; int getR( int n, int s[], int k, int x[], int y[], int p[], int q[] ) { for ( int i = 0; i < n; i++ ) t[i] = i, pos[i] = i; for ( int i = 0; i < k; i++ ) { swap( t[pos[x[i]]], t[pos[y[i]]] ); swap( pos[x[i]], pos[y[i]] ); } for ( int i = 0; i < n; i++ ) perm[t[i]] = s[i];//, printf( "%d ", t[i] ); //printf( "\n\n" ); for ( int i = 0; i < n; i++ ) vis[i] = false; sol.clear(); for ( int i = 0; i < n; i++ ) { //printf( "%d ", perm[i] ); if ( vis[i] ) continue; int j = i; vector<pair<int, int>> v; do { vis[j] = true; if ( perm[j] != j && j != i ) v.push_back( { j, perm[j] } ); j = perm[j]; } while ( j != i ); //reverse( v.begin(), v.end() ); for ( pair<int, int> swp: v ) sol.push_back( swp ); } //printf( "\n" ); return sol.size(); } int findSwapPairs( int n, int s[], int m, int x[], int y[], int p[], int q[] ) { int l = 0, r = m; while ( r - l > 1 ) { int k = (l + r) / 2; int rr = getR( n, s, k, x, y, p, q ); //printf( "%d %d\n", k, rr ); if ( rr > k ) l = k; else r = k; } getR( n, s, r, x, y, p, q ); for ( int i = 0; i < n; i++ ) pos[s[i]] = i; for ( int i = 0; i < r; i++ ) { //for ( int j = 0; j < n; j++ ) // printf( "%d ", pos[j] ); //printf( "\n" ); swap( pos[s[x[i]]], pos[s[y[i]]] ); swap( s[x[i]], s[y[i]] ); //for ( int j = 0; j < n; j++ ) // printf( "%d ", pos[j] ); //printf( "\n" ); if ( i < sol.size() ) { //printf( "%d %d\n", sol[i].first, sol[i].second ); p[i] = pos[sol[i].first]; q[i] = pos[sol[i].second]; swap( pos[sol[i].first], pos[sol[i].second] ); swap( s[p[i]], s[q[i]] ); } else { p[i] = 0; q[i] = 0; } //for ( int j = 0; j < n; j++ ) // printf( "%d ", s[j] ); //printf( "\n\n" ); } //for ( int i = 0; i < n; i++ ) // cout << s[i] << "\n"; return r; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 2396 KB | Output is correct |
2 | Correct | 1 ms | 2408 KB | Output is correct |
3 | Correct | 1 ms | 2396 KB | Output is correct |
4 | Correct | 1 ms | 2396 KB | Output is correct |
5 | Correct | 1 ms | 2396 KB | Output is correct |
6 | Correct | 1 ms | 2396 KB | Output is correct |
7 | Correct | 1 ms | 2492 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 2396 KB | Output is correct |
2 | Correct | 1 ms | 2408 KB | Output is correct |
3 | Correct | 1 ms | 2396 KB | Output is correct |
4 | Correct | 1 ms | 2396 KB | Output is correct |
5 | Correct | 1 ms | 2396 KB | Output is correct |
6 | Correct | 1 ms | 2396 KB | Output is correct |
7 | Correct | 1 ms | 2492 KB | Output is correct |
8 | Correct | 1 ms | 2396 KB | Output is correct |
9 | Correct | 1 ms | 2396 KB | Output is correct |
10 | Correct | 1 ms | 2396 KB | Output is correct |
11 | Correct | 1 ms | 2648 KB | Output is correct |
12 | Correct | 1 ms | 2396 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 2396 KB | Output is correct |
2 | Correct | 1 ms | 2564 KB | Output is correct |
3 | Correct | 1 ms | 2396 KB | Output is correct |
4 | Correct | 1 ms | 2396 KB | Output is correct |
5 | Correct | 1 ms | 2500 KB | Output is correct |
6 | Correct | 1 ms | 2404 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 2396 KB | Output is correct |
2 | Correct | 1 ms | 2408 KB | Output is correct |
3 | Correct | 1 ms | 2396 KB | Output is correct |
4 | Correct | 1 ms | 2396 KB | Output is correct |
5 | Correct | 1 ms | 2396 KB | Output is correct |
6 | Correct | 1 ms | 2396 KB | Output is correct |
7 | Correct | 1 ms | 2492 KB | Output is correct |
8 | Correct | 1 ms | 2396 KB | Output is correct |
9 | Correct | 1 ms | 2396 KB | Output is correct |
10 | Correct | 1 ms | 2396 KB | Output is correct |
11 | Correct | 1 ms | 2648 KB | Output is correct |
12 | Correct | 1 ms | 2396 KB | Output is correct |
13 | Correct | 1 ms | 2396 KB | Output is correct |
14 | Correct | 1 ms | 2564 KB | Output is correct |
15 | Correct | 1 ms | 2396 KB | Output is correct |
16 | Correct | 1 ms | 2396 KB | Output is correct |
17 | Correct | 1 ms | 2500 KB | Output is correct |
18 | Correct | 1 ms | 2404 KB | Output is correct |
19 | Correct | 1 ms | 2396 KB | Output is correct |
20 | Correct | 1 ms | 2404 KB | Output is correct |
21 | Correct | 1 ms | 2664 KB | Output is correct |
22 | Correct | 2 ms | 2664 KB | Output is correct |
23 | Correct | 1 ms | 2664 KB | Output is correct |
24 | Correct | 1 ms | 2664 KB | Output is correct |
25 | Correct | 1 ms | 2568 KB | Output is correct |
26 | Correct | 2 ms | 2516 KB | Output is correct |
27 | Correct | 2 ms | 2636 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 2664 KB | Output is correct |
2 | Correct | 2 ms | 2512 KB | Output is correct |
3 | Correct | 2 ms | 2652 KB | Output is correct |
4 | Incorrect | 1 ms | 2664 KB | Output isn't correct |
5 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 2664 KB | Output is correct |
2 | Correct | 2 ms | 2512 KB | Output is correct |
3 | Correct | 2 ms | 2652 KB | Output is correct |
4 | Incorrect | 1 ms | 2664 KB | Output isn't correct |
5 | Halted | 0 ms | 0 KB | - |