제출 #97308

#제출 시각아이디문제언어결과실행 시간메모리
97308E869120자리 배치 (IOI18_seats)C++14
17 / 100
4091 ms55672 KiB
#include "seats.h" #include <bits/stdc++.h> using namespace std; int H, W, N, cx[1000009], cy[1000009], lx[1000009], ly[1000009], rx[1000009], ry[1000009], sum; int calc(int p1, int p2, int p3, int p4) { return (p3 - p1 + 1) * (p4 - p2 + 1); } void refresh(int L, int R) { for (int i = L; i <= R; i++) { if (calc(lx[i], ly[i], rx[i], ry[i]) == i) sum--; lx[i] = min(lx[i - 1], cx[i - 1]); ly[i] = min(ly[i - 1], cy[i - 1]); rx[i] = max(rx[i - 1], cx[i - 1]); ry[i] = max(ry[i - 1], cy[i - 1]); if (calc(lx[i], ly[i], rx[i], ry[i]) == i) sum++; } } void give_initial_chart(int HH, int WW, std::vector<int> RR, std::vector<int> CC) { H = HH; W = WW; N = H * W; for (int i = 0; i < N; i++) { cx[i] = RR[i]; cy[i] = CC[i]; } for (int i = 0; i <= N; i++) { lx[i] = H; ly[i] = W; rx[i] = -100; ry[i] = -100; } refresh(1, N); } int swap_seats(int a, int b) { if (a > b) swap(a, b); swap(cx[a], cx[b]); swap(cy[a], cy[b]); refresh(a + 1, b + 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...