제출 #673714

#제출 시각아이디문제언어결과실행 시간메모리
673714stevancv정렬하기 (IOI15_sorting)C++14
20 / 100
2 ms468 KiB
#include <bits/stdc++.h> #include "sorting.h" #define ll long long #define ld long double #define sp ' ' #define en '\n' #define smin(a, b) a = min(a, b) #define smax(a, b) a = max(a, b) using namespace std; const int N = 2e5 + 2; const int mod = 1e9 + 7; int findSwapPairs(int n, int s[], int m, int x[], int y[], int p[], int q[]) { int zero = 1; for (int i = 0; i < n; i++) zero &= s[i] == i; p[0] = q[0] = 0; if (zero == 1) return 0; vector<int> inv(n); for (int i = 0; i < n; i++) inv[s[i]] = i; auto Can = [&] (int mid) { vector<int> a(n); iota(a.begin(), a.end(), 0); for (int i = mid; i >= 0; i--) { swap(a[x[i]], a[y[i]]); } vector<int> b(n); for (int i = 0; i < n; i++) b[a[i]] = i; int j = mid; for (int i = 0; i < n; i++) { if (b[i] == inv[i]) continue; if (j < 0) return 0; p[j] = b[i]; q[j--] = inv[i]; swap(a[b[i]], a[inv[i]]); swap(b[i], b[a[b[i]]]); } vector<int> f(n); iota(f.begin(), f.end(), 0); vector<int> invf = f; for (int i = 0; i <= mid; i++) { swap(f[x[i]], f[y[i]]); swap(invf[f[x[i]]], invf[f[y[i]]]); p[i] = invf[p[i]]; q[i] = invf[q[i]]; } return 1; }; int l = 0, r = m - 1, ans = m - 1; while (l <= r) { int mid = l + r >> 1; if (Can(mid)) { ans = mid; r = mid - 1; } else l = mid + 1; } Can(ans); return ans + 1; }

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

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:48:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   48 |         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...