#include "seats.h"
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1000005;
vector<int> r;
pair<int, int> V[MAX_N];
pair<int, int> mx[MAX_N], mi[MAX_N];
vector<int> lst;
struct inout_pq {
priority_queue<int> in, out;
void add(int x) { in.push(-x); }
void delect(int x) { out.push(-x); }
int return_top() {
while (in.size() && out.size() && in.top() == out.top()) {
in.pop();
out.pop();
}
if (in.size()) return -in.top();
return 0;
}
} X[MAX_N], Y[MAX_N];
int h, w, ans;
int sp(int a, int b) {
pair<int, int> x, y;
swap(V[a], V[b]);
if (a > b) swap(a, b);
a = a ? a : a + 1;
mx[0] = mi[0] = V[0];
for (int i = a; i <= b; i++) {
ans -= ((mx[i].first - mi[i].first + 1) * (mx[i].second - mi[i].second + 1) == (i + 1)) ? 1 : 0;
mx[i].first = max(mx[i - 1].first, V[i].first);
mx[i].second = max(mx[i - 1].second, V[i].second);
mi[i].first = min(mi[i - 1].first, V[i].first);
mi[i].second = min(mi[i - 1].second, V[i].second);
ans += ((mx[i].first - mi[i].first + 1) * (mx[i].second - mi[i].second + 1) == (i + 1)) ? 1 : 0;
}
return ans;
}
void sp_init() {
mx[0] = mi[0] = V[0];
swap(V[0], V[h * w - 1]);
ans = 1;
ans = sp(0, h * w - 1);
}
void give_initial_chart(int H, int W, vector<int> R, vector<int> C) {
int i;
h = H;
w = W;
for (i = 0; i < H * W; i++) V[i] = {R[i], C[i]};
if (h + w >= 10000) {
sp_init();
return;
}
for (i = 0; i < H * W; i++) {
X[R[i]].add(i);
Y[C[i]].add(i);
}
}
int swap_seats(int a, int b) {
int i;
if (h + w >= 10000) return sp(a, b);
X[V[a].first].delect(a);
Y[V[a].second].delect(a);
X[V[b].first].delect(b);
Y[V[b].second].delect(b);
swap(V[a], V[b]);
X[V[a].first].add(a);
Y[V[a].second].add(a);
X[V[b].first].add(b);
Y[V[b].second].add(b);
lst.clear();
lst.resize(0);
for (i = 0; i < h; i++) lst.push_back(X[i].return_top());
for (i = 0; i < w; i++) lst.push_back(Y[i].return_top());
sort(lst.begin(), lst.end());
lst.erase(unique(lst.begin(), lst.end()), lst.end());
pair<int, int> x, y;
ans = 1;
x = {V[0].first, V[0].first};
y = {V[0].second, V[0].second};
for (int p : lst) {
ans += ((x.second - x.first + 1) * (y.second - y.first + 1) == p);
y.first = min(y.first, V[p].second);
y.second = max(y.second, V[p].second);
x.first = min(x.first, V[p].first);
x.second = max(x.second, V[p].first);
}
return ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
41 ms |
127836 KB |
Output is correct |
2 |
Correct |
41 ms |
128092 KB |
Output is correct |
3 |
Correct |
42 ms |
128336 KB |
Output is correct |
4 |
Correct |
49 ms |
128012 KB |
Output is correct |
5 |
Correct |
49 ms |
128092 KB |
Output is correct |
6 |
Correct |
44 ms |
128092 KB |
Output is correct |
7 |
Correct |
43 ms |
128028 KB |
Output is correct |
8 |
Correct |
39 ms |
128080 KB |
Output is correct |
9 |
Correct |
40 ms |
128116 KB |
Output is correct |
10 |
Correct |
48 ms |
127824 KB |
Output is correct |
11 |
Correct |
48 ms |
127828 KB |
Output is correct |
12 |
Correct |
49 ms |
128236 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
41 ms |
127836 KB |
Output is correct |
2 |
Correct |
41 ms |
128092 KB |
Output is correct |
3 |
Correct |
42 ms |
128336 KB |
Output is correct |
4 |
Correct |
49 ms |
128012 KB |
Output is correct |
5 |
Correct |
49 ms |
128092 KB |
Output is correct |
6 |
Correct |
44 ms |
128092 KB |
Output is correct |
7 |
Correct |
43 ms |
128028 KB |
Output is correct |
8 |
Correct |
39 ms |
128080 KB |
Output is correct |
9 |
Correct |
40 ms |
128116 KB |
Output is correct |
10 |
Correct |
48 ms |
127824 KB |
Output is correct |
11 |
Correct |
48 ms |
127828 KB |
Output is correct |
12 |
Correct |
49 ms |
128236 KB |
Output is correct |
13 |
Correct |
57 ms |
128340 KB |
Output is correct |
14 |
Correct |
61 ms |
128164 KB |
Output is correct |
15 |
Correct |
115 ms |
130056 KB |
Output is correct |
16 |
Correct |
118 ms |
130060 KB |
Output is correct |
17 |
Correct |
1172 ms |
128604 KB |
Output is correct |
18 |
Correct |
186 ms |
128340 KB |
Output is correct |
19 |
Correct |
269 ms |
128088 KB |
Output is correct |
20 |
Correct |
452 ms |
128504 KB |
Output is correct |
21 |
Correct |
115 ms |
129872 KB |
Output is correct |
22 |
Correct |
113 ms |
130056 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
664 ms |
159204 KB |
Output is correct |
2 |
Correct |
530 ms |
158944 KB |
Output is correct |
3 |
Correct |
873 ms |
158568 KB |
Output is correct |
4 |
Correct |
490 ms |
158436 KB |
Output is correct |
5 |
Correct |
494 ms |
158800 KB |
Output is correct |
6 |
Correct |
388 ms |
158552 KB |
Output is correct |
7 |
Correct |
857 ms |
158688 KB |
Output is correct |
8 |
Correct |
1033 ms |
158548 KB |
Output is correct |
9 |
Correct |
604 ms |
158448 KB |
Output is correct |
10 |
Correct |
362 ms |
158428 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
72 ms |
128092 KB |
Output is correct |
2 |
Correct |
135 ms |
130588 KB |
Output is correct |
3 |
Correct |
369 ms |
158436 KB |
Output is correct |
4 |
Correct |
657 ms |
159208 KB |
Output is correct |
5 |
Correct |
309 ms |
164688 KB |
Output is correct |
6 |
Correct |
344 ms |
180728 KB |
Output is correct |
7 |
Correct |
356 ms |
180704 KB |
Output is correct |
8 |
Correct |
328 ms |
180736 KB |
Output is correct |
9 |
Correct |
387 ms |
180840 KB |
Output is correct |
10 |
Correct |
334 ms |
180828 KB |
Output is correct |
11 |
Correct |
317 ms |
180708 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
58 ms |
129236 KB |
Output is correct |
2 |
Correct |
64 ms |
129544 KB |
Output is correct |
3 |
Correct |
119 ms |
129808 KB |
Output is correct |
4 |
Correct |
823 ms |
129788 KB |
Output is correct |
5 |
Correct |
766 ms |
131072 KB |
Output is correct |
6 |
Execution timed out |
4043 ms |
165092 KB |
Time limit exceeded |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
41 ms |
127836 KB |
Output is correct |
2 |
Correct |
41 ms |
128092 KB |
Output is correct |
3 |
Correct |
42 ms |
128336 KB |
Output is correct |
4 |
Correct |
49 ms |
128012 KB |
Output is correct |
5 |
Correct |
49 ms |
128092 KB |
Output is correct |
6 |
Correct |
44 ms |
128092 KB |
Output is correct |
7 |
Correct |
43 ms |
128028 KB |
Output is correct |
8 |
Correct |
39 ms |
128080 KB |
Output is correct |
9 |
Correct |
40 ms |
128116 KB |
Output is correct |
10 |
Correct |
48 ms |
127824 KB |
Output is correct |
11 |
Correct |
48 ms |
127828 KB |
Output is correct |
12 |
Correct |
49 ms |
128236 KB |
Output is correct |
13 |
Correct |
57 ms |
128340 KB |
Output is correct |
14 |
Correct |
61 ms |
128164 KB |
Output is correct |
15 |
Correct |
115 ms |
130056 KB |
Output is correct |
16 |
Correct |
118 ms |
130060 KB |
Output is correct |
17 |
Correct |
1172 ms |
128604 KB |
Output is correct |
18 |
Correct |
186 ms |
128340 KB |
Output is correct |
19 |
Correct |
269 ms |
128088 KB |
Output is correct |
20 |
Correct |
452 ms |
128504 KB |
Output is correct |
21 |
Correct |
115 ms |
129872 KB |
Output is correct |
22 |
Correct |
113 ms |
130056 KB |
Output is correct |
23 |
Correct |
664 ms |
159204 KB |
Output is correct |
24 |
Correct |
530 ms |
158944 KB |
Output is correct |
25 |
Correct |
873 ms |
158568 KB |
Output is correct |
26 |
Correct |
490 ms |
158436 KB |
Output is correct |
27 |
Correct |
494 ms |
158800 KB |
Output is correct |
28 |
Correct |
388 ms |
158552 KB |
Output is correct |
29 |
Correct |
857 ms |
158688 KB |
Output is correct |
30 |
Correct |
1033 ms |
158548 KB |
Output is correct |
31 |
Correct |
604 ms |
158448 KB |
Output is correct |
32 |
Correct |
362 ms |
158428 KB |
Output is correct |
33 |
Correct |
72 ms |
128092 KB |
Output is correct |
34 |
Correct |
135 ms |
130588 KB |
Output is correct |
35 |
Correct |
369 ms |
158436 KB |
Output is correct |
36 |
Correct |
657 ms |
159208 KB |
Output is correct |
37 |
Correct |
309 ms |
164688 KB |
Output is correct |
38 |
Correct |
344 ms |
180728 KB |
Output is correct |
39 |
Correct |
356 ms |
180704 KB |
Output is correct |
40 |
Correct |
328 ms |
180736 KB |
Output is correct |
41 |
Correct |
387 ms |
180840 KB |
Output is correct |
42 |
Correct |
334 ms |
180828 KB |
Output is correct |
43 |
Correct |
317 ms |
180708 KB |
Output is correct |
44 |
Correct |
58 ms |
129236 KB |
Output is correct |
45 |
Correct |
64 ms |
129544 KB |
Output is correct |
46 |
Correct |
119 ms |
129808 KB |
Output is correct |
47 |
Correct |
823 ms |
129788 KB |
Output is correct |
48 |
Correct |
766 ms |
131072 KB |
Output is correct |
49 |
Execution timed out |
4043 ms |
165092 KB |
Time limit exceeded |
50 |
Halted |
0 ms |
0 KB |
- |