# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1211624 | mar | Seats (IOI18_seats) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int r[MAXN], c[MAXN];
int mn_r[MAXN], mx_r[MAXN], mn_c[MAXN], mx_c[MAXN];
int h, w, n;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> h >> w;
n = h * w;
for (int i = 0; i < n; i++) cin >> r[i];
for (int i = 0; i < n; i++) cin >> c[i];
int ans = 0;
int mr = r[0], xr = r[0], mc = c[0], xc = c[0];
for (int i = 0; i < n; i++) {
mr = min(mr, r[i]);
xr = max(xr, r[i]);
mc = min(mc, c[i]);
xc = max(xc, c[i]);
mn_r[i] = mr;
mx_r[i] = xr;
mn_c[i] = mc;
mx_c[i] = xc;
if ((i + 1) == (xr - mr + 1) * (xc - mc + 1)) ans++;
}
int q;
cin >> q;
while (q--) {
int a, b;
cin >> a >> b;
swap(r[a], r[b]);
swap(c[a], c[b]);
mn_r[0] = mx_r[0] = r[0];
mn_c[0] = mx_c[0] = c[0];
for (int i = 1; i < n; i++) {
mn_r[i] = min(r[i], mn_r[i - 1]);
mx_r[i] = max(r[i], mx_r[i - 1]);
mn_c[i] = min(c[i], mn_c[i - 1]);
mx_c[i] = max(c[i], mx_c[i - 1]);
}
ans = 0;
for (int i = 0; i < n; i++) {
int area = (mx_r[i] - mn_r[i] + 1) * (mx_c[i] - mn_c[i] + 1);
if ((i + 1) == area) ans++;
}
cout << ans << "\n";
}
return 0;
}