#include "seats.h"
#include <bits/stdc++.h>
using namespace std;
int H, W;
vector<int> R, C;
struct seg {
int min[2], ans;
} tree[4 * 1000 * 1000];
int lazy[2][4 * 1000 * 1000];
vector<vector<int>> RC;
seg merge(seg a, seg b) {
if (a.min[0] < b.min[0]) {
return a;
} else if(b.min[0] < a.min[0]) {
return b;
} else if (a.min[1] < b.min[1]) {
return a;
} else if (b.min[1] < a.min[1]) {
return b;
} else {
return {{a.min[0], a.min[1]}, a.ans + b.ans};
}
}
seg build(int cur, int lo, int hi) {
if (lo == hi) {
return tree[cur] = {{0, 0}, 1};
}
int lmid = (lo + hi) / 2, rmid = lmid + 1;
return tree[cur] = merge(build(cur << 1 | 0, lo, lmid),
build(cur << 1 | 1, rmid, hi));
}
void update(int type, int l, int r, int delta, int cur, int lo, int hi) {
if (lo == l && hi == r) {
lazy[type][cur] += delta;
tree[cur].min[type] += delta;
} else {
for(int tt = 0; tt < 2; tt++) {
lazy[tt][cur << 1 | 0] += lazy[tt][cur];
tree[cur << 1 | 0].min[tt] += lazy[tt][cur];
lazy[tt][cur << 1 | 1] += lazy[tt][cur];
tree[cur << 1 | 1].min[tt] += lazy[tt][cur];
lazy[tt][cur] = 0;
}
int lmid = (lo + hi) / 2, rmid = lmid + 1;
if (l <= lmid) {
update(type, l, min(r, lmid), delta, cur << 1 | 0, lo, lmid);
}
if (r >= rmid) {
update(type, max(l, rmid), r, delta, cur << 1 | 1, rmid, hi);
}
tree[cur] = merge(tree[cur << 1 | 0],
tree[cur << 1 | 1]);
}
}
void update(int type, int l, int r, int delta) {
if (l < r)
update(type, l + 1, r, delta, 1, 1, H * W);
}
void give_initial_chart(int HH, int WW, vector<int> RR, vector<int> CC) {
H = HH, W = WW, R = RR, C = CC;
RC = vector<vector<int>>(H + 2, vector<int>(W + 2, H * W));
for (int i = 0; i < H * W; i++) {
RC[R[i] + 1][C[i] + 1] = i;
}
build(1, 1, H * W);
for (int i = 0; i <= H; i++) {
for (int j = 0; j <= W; j++) {
int adj[4] = {RC[i][j], RC[i][j + 1], RC[i + 1][j], RC[i + 1][j + 1]};
sort(adj, adj + 4);
update(0, adj[0], adj[1], +1);
update(1, adj[2], adj[3], +1);
}
}
}
int swap_seats(int a, int b) {
int ax = R[a] + 1, ay = C[a] + 1;
int bx = R[b] + 1, by = C[b] + 1;
for (int i = -1; i < 1; i++) {
for (int j = -1; j < 1; j++) {
int adja[4] = {RC[ax + i][ay + j], RC[ax + i][ay + j + 1], RC[ax + i + 1][ay + j], RC[ax + i + 1][ay + j + 1]};
sort(adja, adja + 4);
update(0, adja[0], adja[1], -1);
update(1, adja[2], adja[3], -1);
int adjb[4] = {RC[bx + i][by + j], RC[bx + i][by + j + 1], RC[bx + i + 1][by + j], RC[bx + i + 1][by + j + 1]};
sort(adjb, adjb + 4);
update(0, adjb[0], adjb[1], -1);
update(1, adjb[2], adjb[3], -1);
}
}
swap(RC[ax][ay], RC[bx][by]);
swap(R[a], R[b]);
swap(C[a], C[b]);
for (int i = -1; i < 1; i++) {
for (int j = -1; j < 1; j++) {
int adja[4] = {RC[ax + i][ay + j], RC[ax + i][ay + j + 1], RC[ax + i + 1][ay + j], RC[ax + i + 1][ay + j + 1]};
sort(adja, adja + 4);
update(0, adja[0], adja[1], +1);
update(1, adja[2], adja[3], +1);
int adjb[4] = {RC[bx + i][by + j], RC[bx + i][by + j + 1], RC[bx + i + 1][by + j], RC[bx + i + 1][by + j + 1]};
sort(adjb, adjb + 4);
update(0, adjb[0], adjb[1], +1);
update(1, adjb[2], adjb[3], +1);
}
}
return tree[1].ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
23 ms |
376 KB |
Output is correct |
2 |
Correct |
39 ms |
500 KB |
Output is correct |
3 |
Correct |
57 ms |
560 KB |
Output is correct |
4 |
Correct |
35 ms |
652 KB |
Output is correct |
5 |
Correct |
29 ms |
744 KB |
Output is correct |
6 |
Correct |
50 ms |
812 KB |
Output is correct |
7 |
Correct |
51 ms |
812 KB |
Output is correct |
8 |
Correct |
47 ms |
812 KB |
Output is correct |
9 |
Correct |
45 ms |
812 KB |
Output is correct |
10 |
Correct |
51 ms |
828 KB |
Output is correct |
11 |
Correct |
45 ms |
828 KB |
Output is correct |
12 |
Correct |
30 ms |
828 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
23 ms |
376 KB |
Output is correct |
2 |
Correct |
39 ms |
500 KB |
Output is correct |
3 |
Correct |
57 ms |
560 KB |
Output is correct |
4 |
Correct |
35 ms |
652 KB |
Output is correct |
5 |
Correct |
29 ms |
744 KB |
Output is correct |
6 |
Correct |
50 ms |
812 KB |
Output is correct |
7 |
Correct |
51 ms |
812 KB |
Output is correct |
8 |
Correct |
47 ms |
812 KB |
Output is correct |
9 |
Correct |
45 ms |
812 KB |
Output is correct |
10 |
Correct |
51 ms |
828 KB |
Output is correct |
11 |
Correct |
45 ms |
828 KB |
Output is correct |
12 |
Correct |
30 ms |
828 KB |
Output is correct |
13 |
Correct |
131 ms |
1728 KB |
Output is correct |
14 |
Correct |
161 ms |
1728 KB |
Output is correct |
15 |
Correct |
90 ms |
1772 KB |
Output is correct |
16 |
Correct |
66 ms |
2108 KB |
Output is correct |
17 |
Correct |
114 ms |
2108 KB |
Output is correct |
18 |
Correct |
107 ms |
2108 KB |
Output is correct |
19 |
Correct |
106 ms |
2108 KB |
Output is correct |
20 |
Correct |
84 ms |
2108 KB |
Output is correct |
21 |
Correct |
66 ms |
2108 KB |
Output is correct |
22 |
Correct |
67 ms |
2188 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3902 ms |
69308 KB |
Output is correct |
2 |
Correct |
1964 ms |
69488 KB |
Output is correct |
3 |
Correct |
1992 ms |
69512 KB |
Output is correct |
4 |
Correct |
1737 ms |
69512 KB |
Output is correct |
5 |
Correct |
1776 ms |
69512 KB |
Output is correct |
6 |
Correct |
1684 ms |
69512 KB |
Output is correct |
7 |
Correct |
1861 ms |
69512 KB |
Output is correct |
8 |
Correct |
1899 ms |
69512 KB |
Output is correct |
9 |
Correct |
1940 ms |
69512 KB |
Output is correct |
10 |
Correct |
1776 ms |
69512 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
121 ms |
69512 KB |
Output is correct |
2 |
Correct |
271 ms |
69512 KB |
Output is correct |
3 |
Correct |
1742 ms |
69512 KB |
Output is correct |
4 |
Execution timed out |
4043 ms |
69512 KB |
Time limit exceeded |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
76 ms |
69512 KB |
Output is correct |
2 |
Correct |
161 ms |
69512 KB |
Output is correct |
3 |
Correct |
292 ms |
69512 KB |
Output is correct |
4 |
Correct |
401 ms |
69512 KB |
Output is correct |
5 |
Correct |
694 ms |
69512 KB |
Output is correct |
6 |
Correct |
2491 ms |
77568 KB |
Output is correct |
7 |
Correct |
2980 ms |
77568 KB |
Output is correct |
8 |
Correct |
2502 ms |
77568 KB |
Output is correct |
9 |
Execution timed out |
4056 ms |
77568 KB |
Time limit exceeded |
10 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
23 ms |
376 KB |
Output is correct |
2 |
Correct |
39 ms |
500 KB |
Output is correct |
3 |
Correct |
57 ms |
560 KB |
Output is correct |
4 |
Correct |
35 ms |
652 KB |
Output is correct |
5 |
Correct |
29 ms |
744 KB |
Output is correct |
6 |
Correct |
50 ms |
812 KB |
Output is correct |
7 |
Correct |
51 ms |
812 KB |
Output is correct |
8 |
Correct |
47 ms |
812 KB |
Output is correct |
9 |
Correct |
45 ms |
812 KB |
Output is correct |
10 |
Correct |
51 ms |
828 KB |
Output is correct |
11 |
Correct |
45 ms |
828 KB |
Output is correct |
12 |
Correct |
30 ms |
828 KB |
Output is correct |
13 |
Correct |
131 ms |
1728 KB |
Output is correct |
14 |
Correct |
161 ms |
1728 KB |
Output is correct |
15 |
Correct |
90 ms |
1772 KB |
Output is correct |
16 |
Correct |
66 ms |
2108 KB |
Output is correct |
17 |
Correct |
114 ms |
2108 KB |
Output is correct |
18 |
Correct |
107 ms |
2108 KB |
Output is correct |
19 |
Correct |
106 ms |
2108 KB |
Output is correct |
20 |
Correct |
84 ms |
2108 KB |
Output is correct |
21 |
Correct |
66 ms |
2108 KB |
Output is correct |
22 |
Correct |
67 ms |
2188 KB |
Output is correct |
23 |
Correct |
3902 ms |
69308 KB |
Output is correct |
24 |
Correct |
1964 ms |
69488 KB |
Output is correct |
25 |
Correct |
1992 ms |
69512 KB |
Output is correct |
26 |
Correct |
1737 ms |
69512 KB |
Output is correct |
27 |
Correct |
1776 ms |
69512 KB |
Output is correct |
28 |
Correct |
1684 ms |
69512 KB |
Output is correct |
29 |
Correct |
1861 ms |
69512 KB |
Output is correct |
30 |
Correct |
1899 ms |
69512 KB |
Output is correct |
31 |
Correct |
1940 ms |
69512 KB |
Output is correct |
32 |
Correct |
1776 ms |
69512 KB |
Output is correct |
33 |
Correct |
121 ms |
69512 KB |
Output is correct |
34 |
Correct |
271 ms |
69512 KB |
Output is correct |
35 |
Correct |
1742 ms |
69512 KB |
Output is correct |
36 |
Execution timed out |
4043 ms |
69512 KB |
Time limit exceeded |
37 |
Halted |
0 ms |
0 KB |
- |