제출 #970671

#제출 시각아이디문제언어결과실행 시간메모리
970671nguyentunglam정렬하기 (IOI15_sorting)C++17
100 / 100
203 ms23604 KiB
#include "sorting.h" #ifdef ngu #include "grader.cpp" #endif // ngu #include<bits/stdc++.h> using namespace std; const int N = 2e5 + 10; int a[2][N], pos[2][N]; int cnt; int findSwapPairs(int n, int s[], int m, int x[], int y[], int p[], int q[]) { int l = 0, r = m, ans = -1; auto check = [&] (int rounds) { for(int i = 0; i < n; i++) a[0][i] = a[1][i] = s[i]; for(int i = 0; i < rounds; i++) { swap(a[1][x[i]], a[1][y[i]]); } cnt = 0; auto Swap = [&] (int j, int val1, int val2) { if (j == 0) { p[cnt] = pos[j][val1]; q[cnt] = pos[j][val2]; } swap(pos[j][val1], pos[j][val2]); swap(a[j][pos[j][val1]], a[j][pos[j][val2]]); }; for(int i = 0; i < n; i++) pos[0][a[0][i]] = i, pos[1][a[1][i]] = i; for(int i = 0; i < n; i++) if (a[1][i] != i) { if (cnt >= rounds) { return false; } Swap(0, a[0][x[cnt]], a[0][y[cnt]]); Swap(0, a[1][i], i); cnt++; Swap(1, a[1][i], i); } for(int i = cnt; i < rounds; i++) p[i] = q[i] = 0; return true; }; while (l <= r) { int mid = l + r >> 1; if (check(mid)) { ans = mid; r = mid - 1; } else l = mid + 1; } assert(ans != -1); check(ans); return ans; }

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

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:53:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   53 |     int mid = l + r >> 1;
      |               ~~^~~
#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...