# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
630379 |
2022-08-16T09:46:02 Z |
abeker |
Seats (IOI18_seats) |
C++17 |
|
2844 ms |
228784 KB |
#include <bits/stdc++.h>
using namespace std;
typedef pair <int, int> pii;
const int MAXN = 1e6 + 5;
const int offset = 1 << 20;
const int INF = 1e9;
const int dx[] = {0, 0, -1, 1};
const int dy[] = {-1, 1, 0, 0};
struct node {
int mini, occ, lazy;
};
struct tournament {
node t[2 * offset];
node merge(node l, node r) {
node res;
res.mini = min(l.mini, r.mini);
res.occ = 0;
if (l.mini == res.mini)
res.occ += l.occ;
if (r.mini == res.mini)
res.occ += r.occ;
res.lazy = l.lazy + r.lazy;
return res;
}
void init(int n) {
for (int i = 0; i < offset; i++)
t[i + offset] = {i < n ? -1 : INF, 1, 0};
for (int i = offset - 1; i >= 0; i--)
t[i] = merge(t[2 * i], t[2 * i + 1]);
}
void prop(int x) {
t[x].mini += t[x].lazy;
if (x < offset) {
t[2 * x].lazy += t[x].lazy;
t[2 * x + 1].lazy += t[x].lazy;
}
t[x].lazy = 0;
}
void update(int x, int lo, int hi, int from, int to, int val) {
prop(x);
if (lo >= to || hi <= from)
return;
if (lo >= from && hi <= to) {
t[x].mini += val;
if (x < offset) {
t[2 * x].lazy += val;
t[2 * x + 1].lazy += val;
}
return;
}
int mid = (lo + hi) / 2;
update(2 * x, lo, mid, from, to, val);
update(2 * x + 1, mid, hi, from, to, val);
t[x] = merge(t[2 * x], t[2 * x + 1]);
}
node query(int x, int lo, int hi, int from, int to) {
prop(x);
if (lo >= to || hi <= from)
return {INF, 1, 0};
if (lo >= from && hi <= to)
return t[x];
int mid = (lo + hi) / 2;
return merge(query(2 * x, lo, mid, from, to), query(2 * x + 1, mid, hi, from, to));
}
void update(int from, int to) {
if (from < to)
update(1, 0, offset, from, to, 1);
else
update(1, 0, offset, to, from, -1);
}
int query(int from, int to) {
node tmp = query(1, 0, offset, from, to);
return tmp.mini ? 0 : tmp.occ;
}
};
int N, H, W;
vector <int> r, c;
vector < vector <int> > mat, mn1, mn2;
tournament T;
bool ok(int x, int y) {
return x > 0 && y > 0 && x <= H && y <= W;
}
void change(int x, int y) {
int old = mn1[x][y];
mn1[x][y] = max(min(mat[x - 1][y], mat[x][y - 1]), mat[x][y]);
T.update(old, mn1[x][y]);
vector <int> adj;
for (int i = 0; i < 4; i++)
adj.push_back(mat[x + dx[i]][y + dy[i]]);
sort(adj.begin(), adj.end());
old = mn2[x][y];
mn2[x][y] = min(adj[1], mat[x][y]);
T.update(mn2[x][y], old);
}
void update_all(int x, int y) {
change(x, y);
for (int i = 0; i < 4; i++)
if (ok(x + dx[i], y + dy[i]))
change(x + dx[i], y + dy[i]);
}
void give_initial_chart(int h, int w, vector <int> R, vector <int> C) {
H = h;
W = w;
r = R;
c = C;
N = H * W;
T.init(N);
mat.resize(H + 2);
mn1.resize(H + 2);
mn2.resize(H + 2);
for (int i = 0; i < H + 2; i++)
mat[i] = mn1[i] = mn2[i] = vector <int> (W + 2, N);
for (int i = 0; i < N; i++) {
r[i]++; c[i]++;
mat[r[i]][c[i]] = mn1[r[i]][c[i]] = mn2[r[i]][c[i]] = i;
}
for (int i = 1; i <= H; i++)
for (int j = 1; j <= W; j++)
change(i, j);
}
int swap_seats(int a, int b) {
swap(mat[r[a]][c[a]], mat[r[b]][c[b]]);
swap(r[a], r[b]);
swap(c[a], c[b]);
update_all(r[a], c[a]);
update_all(r[b], c[b]);
return T.query(0, N);
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
40 ms |
25036 KB |
Output is correct |
2 |
Correct |
49 ms |
25068 KB |
Output is correct |
3 |
Correct |
58 ms |
25024 KB |
Output is correct |
4 |
Correct |
43 ms |
25064 KB |
Output is correct |
5 |
Correct |
40 ms |
25184 KB |
Output is correct |
6 |
Correct |
48 ms |
25056 KB |
Output is correct |
7 |
Correct |
49 ms |
25036 KB |
Output is correct |
8 |
Correct |
64 ms |
25036 KB |
Output is correct |
9 |
Correct |
49 ms |
25020 KB |
Output is correct |
10 |
Correct |
48 ms |
25048 KB |
Output is correct |
11 |
Correct |
55 ms |
25032 KB |
Output is correct |
12 |
Correct |
38 ms |
25028 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
40 ms |
25036 KB |
Output is correct |
2 |
Correct |
49 ms |
25068 KB |
Output is correct |
3 |
Correct |
58 ms |
25024 KB |
Output is correct |
4 |
Correct |
43 ms |
25064 KB |
Output is correct |
5 |
Correct |
40 ms |
25184 KB |
Output is correct |
6 |
Correct |
48 ms |
25056 KB |
Output is correct |
7 |
Correct |
49 ms |
25036 KB |
Output is correct |
8 |
Correct |
64 ms |
25036 KB |
Output is correct |
9 |
Correct |
49 ms |
25020 KB |
Output is correct |
10 |
Correct |
48 ms |
25048 KB |
Output is correct |
11 |
Correct |
55 ms |
25032 KB |
Output is correct |
12 |
Correct |
38 ms |
25028 KB |
Output is correct |
13 |
Correct |
70 ms |
25428 KB |
Output is correct |
14 |
Correct |
79 ms |
25484 KB |
Output is correct |
15 |
Correct |
57 ms |
25700 KB |
Output is correct |
16 |
Correct |
51 ms |
27028 KB |
Output is correct |
17 |
Correct |
65 ms |
25592 KB |
Output is correct |
18 |
Correct |
65 ms |
25492 KB |
Output is correct |
19 |
Correct |
64 ms |
25636 KB |
Output is correct |
20 |
Correct |
55 ms |
26196 KB |
Output is correct |
21 |
Correct |
51 ms |
25644 KB |
Output is correct |
22 |
Correct |
54 ms |
26964 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1841 ms |
76332 KB |
Output is correct |
2 |
Correct |
1177 ms |
76332 KB |
Output is correct |
3 |
Correct |
1317 ms |
76280 KB |
Output is correct |
4 |
Correct |
1016 ms |
76284 KB |
Output is correct |
5 |
Correct |
1170 ms |
76312 KB |
Output is correct |
6 |
Correct |
1077 ms |
76280 KB |
Output is correct |
7 |
Correct |
1105 ms |
76280 KB |
Output is correct |
8 |
Correct |
1149 ms |
76336 KB |
Output is correct |
9 |
Correct |
1080 ms |
76276 KB |
Output is correct |
10 |
Correct |
1096 ms |
76276 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
66 ms |
25500 KB |
Output is correct |
2 |
Correct |
158 ms |
29388 KB |
Output is correct |
3 |
Correct |
1046 ms |
76288 KB |
Output is correct |
4 |
Correct |
1874 ms |
76280 KB |
Output is correct |
5 |
Correct |
1008 ms |
99696 KB |
Output is correct |
6 |
Correct |
2043 ms |
228784 KB |
Output is correct |
7 |
Correct |
1078 ms |
84000 KB |
Output is correct |
8 |
Correct |
1173 ms |
76464 KB |
Output is correct |
9 |
Correct |
1068 ms |
77316 KB |
Output is correct |
10 |
Correct |
1096 ms |
90224 KB |
Output is correct |
11 |
Correct |
1083 ms |
146500 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
209 ms |
26548 KB |
Output is correct |
2 |
Correct |
235 ms |
26624 KB |
Output is correct |
3 |
Correct |
251 ms |
26520 KB |
Output is correct |
4 |
Correct |
326 ms |
26592 KB |
Output is correct |
5 |
Correct |
335 ms |
27272 KB |
Output is correct |
6 |
Correct |
1356 ms |
100656 KB |
Output is correct |
7 |
Correct |
1440 ms |
100600 KB |
Output is correct |
8 |
Correct |
1368 ms |
100652 KB |
Output is correct |
9 |
Correct |
2004 ms |
100596 KB |
Output is correct |
10 |
Correct |
1327 ms |
100604 KB |
Output is correct |
11 |
Correct |
1347 ms |
100616 KB |
Output is correct |
12 |
Correct |
1239 ms |
100600 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
40 ms |
25036 KB |
Output is correct |
2 |
Correct |
49 ms |
25068 KB |
Output is correct |
3 |
Correct |
58 ms |
25024 KB |
Output is correct |
4 |
Correct |
43 ms |
25064 KB |
Output is correct |
5 |
Correct |
40 ms |
25184 KB |
Output is correct |
6 |
Correct |
48 ms |
25056 KB |
Output is correct |
7 |
Correct |
49 ms |
25036 KB |
Output is correct |
8 |
Correct |
64 ms |
25036 KB |
Output is correct |
9 |
Correct |
49 ms |
25020 KB |
Output is correct |
10 |
Correct |
48 ms |
25048 KB |
Output is correct |
11 |
Correct |
55 ms |
25032 KB |
Output is correct |
12 |
Correct |
38 ms |
25028 KB |
Output is correct |
13 |
Correct |
70 ms |
25428 KB |
Output is correct |
14 |
Correct |
79 ms |
25484 KB |
Output is correct |
15 |
Correct |
57 ms |
25700 KB |
Output is correct |
16 |
Correct |
51 ms |
27028 KB |
Output is correct |
17 |
Correct |
65 ms |
25592 KB |
Output is correct |
18 |
Correct |
65 ms |
25492 KB |
Output is correct |
19 |
Correct |
64 ms |
25636 KB |
Output is correct |
20 |
Correct |
55 ms |
26196 KB |
Output is correct |
21 |
Correct |
51 ms |
25644 KB |
Output is correct |
22 |
Correct |
54 ms |
26964 KB |
Output is correct |
23 |
Correct |
1841 ms |
76332 KB |
Output is correct |
24 |
Correct |
1177 ms |
76332 KB |
Output is correct |
25 |
Correct |
1317 ms |
76280 KB |
Output is correct |
26 |
Correct |
1016 ms |
76284 KB |
Output is correct |
27 |
Correct |
1170 ms |
76312 KB |
Output is correct |
28 |
Correct |
1077 ms |
76280 KB |
Output is correct |
29 |
Correct |
1105 ms |
76280 KB |
Output is correct |
30 |
Correct |
1149 ms |
76336 KB |
Output is correct |
31 |
Correct |
1080 ms |
76276 KB |
Output is correct |
32 |
Correct |
1096 ms |
76276 KB |
Output is correct |
33 |
Correct |
66 ms |
25500 KB |
Output is correct |
34 |
Correct |
158 ms |
29388 KB |
Output is correct |
35 |
Correct |
1046 ms |
76288 KB |
Output is correct |
36 |
Correct |
1874 ms |
76280 KB |
Output is correct |
37 |
Correct |
1008 ms |
99696 KB |
Output is correct |
38 |
Correct |
2043 ms |
228784 KB |
Output is correct |
39 |
Correct |
1078 ms |
84000 KB |
Output is correct |
40 |
Correct |
1173 ms |
76464 KB |
Output is correct |
41 |
Correct |
1068 ms |
77316 KB |
Output is correct |
42 |
Correct |
1096 ms |
90224 KB |
Output is correct |
43 |
Correct |
1083 ms |
146500 KB |
Output is correct |
44 |
Correct |
209 ms |
26548 KB |
Output is correct |
45 |
Correct |
235 ms |
26624 KB |
Output is correct |
46 |
Correct |
251 ms |
26520 KB |
Output is correct |
47 |
Correct |
326 ms |
26592 KB |
Output is correct |
48 |
Correct |
335 ms |
27272 KB |
Output is correct |
49 |
Correct |
1356 ms |
100656 KB |
Output is correct |
50 |
Correct |
1440 ms |
100600 KB |
Output is correct |
51 |
Correct |
1368 ms |
100652 KB |
Output is correct |
52 |
Correct |
2004 ms |
100596 KB |
Output is correct |
53 |
Correct |
1327 ms |
100604 KB |
Output is correct |
54 |
Correct |
1347 ms |
100616 KB |
Output is correct |
55 |
Correct |
1239 ms |
100600 KB |
Output is correct |
56 |
Correct |
326 ms |
26524 KB |
Output is correct |
57 |
Correct |
390 ms |
26584 KB |
Output is correct |
58 |
Correct |
480 ms |
26964 KB |
Output is correct |
59 |
Correct |
1798 ms |
77240 KB |
Output is correct |
60 |
Correct |
2342 ms |
77244 KB |
Output is correct |
61 |
Correct |
1629 ms |
77248 KB |
Output is correct |
62 |
Correct |
1418 ms |
88864 KB |
Output is correct |
63 |
Correct |
2255 ms |
84908 KB |
Output is correct |
64 |
Correct |
1789 ms |
79524 KB |
Output is correct |
65 |
Correct |
1865 ms |
77328 KB |
Output is correct |
66 |
Correct |
2103 ms |
78248 KB |
Output is correct |
67 |
Correct |
1927 ms |
91192 KB |
Output is correct |
68 |
Correct |
1624 ms |
120168 KB |
Output is correct |
69 |
Correct |
2844 ms |
147552 KB |
Output is correct |