Submission #1235048

#TimeUsernameProblemLanguageResultExecution timeMemory
1235048colossal_pepeSeats (IOI18_seats)C++20
17 / 100
4094 ms43828 KiB
#include "seats.h"
#include <bits/stdc++.h>
using namespace std;

const int INF = 1e9;

int n, h, w, cnt_good;
vector<int> r, r_mn, r_mx, c, c_mn, c_mx, is_good;

int area(int i) {
	return (r_mx[i] - r_mn[i] + 1) * (c_mx[i] - c_mn[i] + 1);
}

void give_initial_chart(int H, int W, vector<int> R, vector<int> C) {
	h = H, w = W, n = H * W;
	r = R, r_mn = r, r_mx = r, c = C, c_mn = c, c_mx = c;
	is_good.resize(n);
	cnt_good = is_good[0] = 1;
	for (int i = 1; i < n; i++) {
		r_mn[i] = min(r_mn[i - 1], r[i]);
		r_mx[i] = max(r_mx[i - 1], r[i]);
		c_mn[i] = min(c_mn[i - 1], c[i]);
		c_mx[i] = max(c_mx[i - 1], c[i]);
		is_good[i] = (area(i) == i + 1);
		cnt_good += is_good[i];
	}
}

int swap_seats(int a, int b) {
	if (a > b) swap(a, b);
	if (b - a > 10000) cout << "parumna";
	for (int i = a; i <= b; i++) {
		cnt_good -= is_good[i];
	}
	swap(r[a], r[b]);
	swap(c[a], c[b]);
	for (int i = a; i <= b; i++) {
		r_mn[i] = min(i ? r_mn[i - 1] : INF, r[i]);
		r_mx[i] = max(i ? r_mx[i - 1] :  -1, r[i]);
		c_mn[i] = min(i ? c_mn[i - 1] : INF, c[i]);
		c_mx[i] = max(i ? c_mx[i - 1] :  -1, c[i]);
		is_good[i] = (area(i) == i + 1);
		cnt_good += is_good[i];
	}
	return cnt_good;
}
#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...