Submission #425486

#TimeUsernameProblemLanguageResultExecution timeMemory
425486KoDSeats (IOI18_seats)C++17
0 / 100
4083 ms24132 KiB
#include <bits/stdc++.h> #include "seats.h" template <class T> using Vec = std::vector<T>; namespace { int H, W; Vec<int> R, C; }; void give_initial_chart(int h, int w, Vec<int> r, Vec<int> c) { H = h, W = w; R = r, C = c; } int swap_seats(int a, int b) { if (H + W <= 2000) { std::swap(C[a], C[b]); std::swap(R[a], R[b]); int l = C[0], r = C[0], u = R[0], d = R[0]; int ret = 0, cur = 0; while (cur < H * W) { l = std::min(l, C[cur]); r = std::max(r, C[cur]); u = std::min(u, R[cur]); d = std::max(d, R[cur]); if ((r - l + 1) * (d - u + 1) == cur + 1) { ret += 1; cur += 1; } else { cur = (r - l + 1) * (d - u + 1) - 1; } } return ret; } else { static int sum = -1; static Vec<int> left, right, up, down; if (sum == -1) { left = right = up = down = Vec<int>(H * W); sum = 0; for (int i = 0; i < H * W; ++i) { left[i] = right[i] = C[i]; up[i] = down[i] = R[i]; if (i > 0) { left[i] = std::min(left[i], left[i - 1]); right[i] = std::max(right[i], right[i - 1]); up[i] = std::min(up[i], up[i - 1]); down[i] = std::max(down[i], down[i - 1]); } sum += ((right[i] - left[i] + 1) * (down[i] - up[i] + 1) == i + 1); } } if (a > b) { std::swap(a, b); } for (int i = a; i <= b; ++i) { sum -= ((right[i] - left[i] + 1) * (down[i] - up[i] + 1) == i + 1); } std::swap(C[a], C[b]); std::swap(R[a], R[b]); for (int i = a; i <= b; ++i) { left[i] = right[i] = C[i]; up[i] = down[i] = R[i]; if (i > 0) { left[i] = std::min(left[i], left[i - 1]); right[i] = std::max(right[i], right[i - 1]); up[i] = std::min(up[i], up[i - 1]); down[i] = std::max(down[i], down[i - 1]); } sum += ((right[i] - left[i] + 1) * (down[i] - up[i] + 1) == i + 1); } return sum; } }
#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...