제출 #763115

#제출 시각아이디문제언어결과실행 시간메모리
763115t6twotwo자리 배치 (IOI18_seats)C++17
17 / 100
4030 ms56396 KiB
#include "seats.h" using namespace std; int N, M, ans; vector<int> A, B, xmax, xmin, ymax, ymin; int f(int k) { return (xmax[k] - xmin[k] + 1) * (ymax[k] - ymin[k] + 1) == k; } void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) { N = H, M = W; A = R, B = C; xmax.resize(N * M + 1, -1); xmin.resize(N * M + 1, N); ymax.resize(N * M + 1, -1); ymin.resize(N * M + 1, M); for (int i = 0; i < N * M; i++) { xmax[i + 1] = max(xmax[i], A[i]); xmin[i + 1] = min(xmin[i], A[i]); ymax[i + 1] = max(ymax[i], B[i]); ymin[i + 1] = min(ymin[i], B[i]); ans += f(i + 1); } } int swap_seats(int a, int b) { swap(A[a], A[b]); swap(B[a], B[b]); for (int i = min(a, b); i <= max(a, b); i++) { ans -= f(i + 1); xmax[i + 1] = max(xmax[i], A[i]); xmin[i + 1] = min(xmin[i], A[i]); ymax[i + 1] = max(ymax[i], B[i]); ymin[i + 1] = min(ymin[i], B[i]); ans += f(i + 1); } return ans; }
#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...