Submission #97308

#TimeUsernameProblemLanguageResultExecution timeMemory
97308E869120Seats (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...