# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
596995 |
2022-07-15T11:16:36 Z |
Lucpp |
Seats (IOI18_seats) |
C++17 |
|
1364 ms |
111032 KB |
#include "seats.h"
#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
struct Seg{
vector<pair<int, int>> seg;
vector<int> lazy;
int cap;
pair<int, int> combine(pair<int, int> a, pair<int, int> b){
if(a > b) swap(a, b);
if(a.first == b.first) a.second += b.second;
return a;
}
void init(vector<int> v){
int n = (int)v.size();
for(int i = 1; i < n; i++) v[i] += v[i-1];
for(cap = 1; cap < n; cap*=2);
seg.resize(2*cap, {INF, 1});
lazy.resize(2*cap, 0);
for(int i = 0; i < n; i++) seg[i+cap].first = v[i];
for(int i = cap-1; i >= 1; i--) seg[i] = combine(seg[2*i], seg[2*i+1]);
}
void apply(int v, int i){
seg[i].first += v;
lazy[i] += v;
}
void push(int i){
apply(lazy[i], 2*i);
apply(lazy[i], 2*i+1);
lazy[i] = 0;
}
void upd(int l, int r, int v, int a, int b, int i){
if(l <= a && b <= r) apply(v, i);
else if(b < l || r < a) return;
else{
push(i);
int m = (a+b)/2;
upd(l, r, v, a, m, 2*i);
upd(l, r, v, m+1, b, 2*i+1);
seg[i] = combine(seg[2*i], seg[2*i+1]);
}
}
void upd(int l, int r, int v){upd(l, r, v, 1, cap, 1);}
};
int n, W, H;
vector<int> r, c;
vector<int> dx = {1, -1, 0, 0}, dy = {0, 0, 1, -1};
vector<vector<int>> num;
vector<int> adj;
Seg seg;
int calc(int x, int y){
int res = 0;
for(int i = -1; i < 1; i++){
for(int j = -1; j < 1; j++){
int cnt = 0;
for(int a = 0; a < 2; a++){
for(int b = 0; b < 2; b++){
int nx = x+i+a;
int ny = y+j+b;
if(num[nx][ny] <= num[x][y]) cnt++;
}
}
if(cnt == 1) res++;
if(cnt == 2) res--;
if(cnt == 3) res++;
if(cnt == 4) res--;
}
}
return res;
}
void upd(int x, int y){
if(x == 0 || x == H+1 || y == 0 || y == W+1) return;
int res = calc(x, y);
seg.upd(num[x][y]+1, n+1, res-adj[num[x][y]]);
adj[num[x][y]] = res;
}
void give_initial_chart(int h, int w, vector<int> R, vector<int> C) {
H = h, W = w;
n = H*W;
r = R;
c = C;
num.assign(H+2, vector<int>(W+2, INF));
adj.resize(n);
for(int i = 0; i < n; i++) num[r[i]+1][c[i]+1] = i;
for(int i = 0; i < n; i++){
int x = r[i]+1, y = c[i]+1;
adj[i] = calc(x, y);
}
seg.init(adj);
}
int qry = 0;
int swap_seats(int a, int b) {
qry++;
if(a > b) swap(a, b);
swap(r[a], r[b]);
swap(c[a], c[b]);
swap(num[r[a]+1][c[a]+1], num[r[b]+1][c[b]+1]);
for(int i = -1; i <= 1; i++){
for(int j = -1; j <= 1; j++){
upd(r[a]+1+i, c[a]+1+j);
upd(r[b]+1+i, c[b]+1+j);
}
}
int ans = seg.seg[1].second;
return ans;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
340 KB |
Output is correct |
2 |
Correct |
20 ms |
348 KB |
Output is correct |
3 |
Correct |
25 ms |
372 KB |
Output is correct |
4 |
Correct |
10 ms |
352 KB |
Output is correct |
5 |
Correct |
9 ms |
360 KB |
Output is correct |
6 |
Correct |
20 ms |
356 KB |
Output is correct |
7 |
Correct |
20 ms |
372 KB |
Output is correct |
8 |
Correct |
24 ms |
340 KB |
Output is correct |
9 |
Correct |
23 ms |
352 KB |
Output is correct |
10 |
Correct |
24 ms |
372 KB |
Output is correct |
11 |
Correct |
20 ms |
364 KB |
Output is correct |
12 |
Correct |
9 ms |
396 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
340 KB |
Output is correct |
2 |
Correct |
20 ms |
348 KB |
Output is correct |
3 |
Correct |
25 ms |
372 KB |
Output is correct |
4 |
Correct |
10 ms |
352 KB |
Output is correct |
5 |
Correct |
9 ms |
360 KB |
Output is correct |
6 |
Correct |
20 ms |
356 KB |
Output is correct |
7 |
Correct |
20 ms |
372 KB |
Output is correct |
8 |
Correct |
24 ms |
340 KB |
Output is correct |
9 |
Correct |
23 ms |
352 KB |
Output is correct |
10 |
Correct |
24 ms |
372 KB |
Output is correct |
11 |
Correct |
20 ms |
364 KB |
Output is correct |
12 |
Correct |
9 ms |
396 KB |
Output is correct |
13 |
Correct |
53 ms |
1100 KB |
Output is correct |
14 |
Correct |
56 ms |
1088 KB |
Output is correct |
15 |
Correct |
19 ms |
1108 KB |
Output is correct |
16 |
Correct |
21 ms |
1600 KB |
Output is correct |
17 |
Correct |
38 ms |
1156 KB |
Output is correct |
18 |
Correct |
50 ms |
1092 KB |
Output is correct |
19 |
Correct |
53 ms |
1112 KB |
Output is correct |
20 |
Correct |
34 ms |
1320 KB |
Output is correct |
21 |
Correct |
19 ms |
1116 KB |
Output is correct |
22 |
Correct |
20 ms |
1528 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
408 ms |
60200 KB |
Output is correct |
2 |
Correct |
343 ms |
60216 KB |
Output is correct |
3 |
Correct |
350 ms |
60212 KB |
Output is correct |
4 |
Correct |
371 ms |
60132 KB |
Output is correct |
5 |
Correct |
374 ms |
60244 KB |
Output is correct |
6 |
Correct |
343 ms |
60236 KB |
Output is correct |
7 |
Correct |
328 ms |
60244 KB |
Output is correct |
8 |
Correct |
353 ms |
60208 KB |
Output is correct |
9 |
Correct |
333 ms |
60132 KB |
Output is correct |
10 |
Correct |
361 ms |
60228 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
53 ms |
1076 KB |
Output is correct |
2 |
Correct |
93 ms |
6516 KB |
Output is correct |
3 |
Correct |
348 ms |
60136 KB |
Output is correct |
4 |
Correct |
398 ms |
60216 KB |
Output is correct |
5 |
Correct |
294 ms |
67944 KB |
Output is correct |
6 |
Correct |
659 ms |
111032 KB |
Output is correct |
7 |
Correct |
369 ms |
62772 KB |
Output is correct |
8 |
Correct |
329 ms |
60228 KB |
Output is correct |
9 |
Correct |
379 ms |
60484 KB |
Output is correct |
10 |
Correct |
337 ms |
64828 KB |
Output is correct |
11 |
Correct |
338 ms |
83660 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
30 ms |
1256 KB |
Output is correct |
2 |
Correct |
59 ms |
1296 KB |
Output is correct |
3 |
Correct |
93 ms |
1356 KB |
Output is correct |
4 |
Correct |
146 ms |
1296 KB |
Output is correct |
5 |
Correct |
181 ms |
2028 KB |
Output is correct |
6 |
Correct |
604 ms |
68312 KB |
Output is correct |
7 |
Correct |
584 ms |
68384 KB |
Output is correct |
8 |
Correct |
579 ms |
68344 KB |
Output is correct |
9 |
Correct |
689 ms |
68332 KB |
Output is correct |
10 |
Correct |
547 ms |
68356 KB |
Output is correct |
11 |
Correct |
556 ms |
68336 KB |
Output is correct |
12 |
Correct |
543 ms |
68348 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
340 KB |
Output is correct |
2 |
Correct |
20 ms |
348 KB |
Output is correct |
3 |
Correct |
25 ms |
372 KB |
Output is correct |
4 |
Correct |
10 ms |
352 KB |
Output is correct |
5 |
Correct |
9 ms |
360 KB |
Output is correct |
6 |
Correct |
20 ms |
356 KB |
Output is correct |
7 |
Correct |
20 ms |
372 KB |
Output is correct |
8 |
Correct |
24 ms |
340 KB |
Output is correct |
9 |
Correct |
23 ms |
352 KB |
Output is correct |
10 |
Correct |
24 ms |
372 KB |
Output is correct |
11 |
Correct |
20 ms |
364 KB |
Output is correct |
12 |
Correct |
9 ms |
396 KB |
Output is correct |
13 |
Correct |
53 ms |
1100 KB |
Output is correct |
14 |
Correct |
56 ms |
1088 KB |
Output is correct |
15 |
Correct |
19 ms |
1108 KB |
Output is correct |
16 |
Correct |
21 ms |
1600 KB |
Output is correct |
17 |
Correct |
38 ms |
1156 KB |
Output is correct |
18 |
Correct |
50 ms |
1092 KB |
Output is correct |
19 |
Correct |
53 ms |
1112 KB |
Output is correct |
20 |
Correct |
34 ms |
1320 KB |
Output is correct |
21 |
Correct |
19 ms |
1116 KB |
Output is correct |
22 |
Correct |
20 ms |
1528 KB |
Output is correct |
23 |
Correct |
408 ms |
60200 KB |
Output is correct |
24 |
Correct |
343 ms |
60216 KB |
Output is correct |
25 |
Correct |
350 ms |
60212 KB |
Output is correct |
26 |
Correct |
371 ms |
60132 KB |
Output is correct |
27 |
Correct |
374 ms |
60244 KB |
Output is correct |
28 |
Correct |
343 ms |
60236 KB |
Output is correct |
29 |
Correct |
328 ms |
60244 KB |
Output is correct |
30 |
Correct |
353 ms |
60208 KB |
Output is correct |
31 |
Correct |
333 ms |
60132 KB |
Output is correct |
32 |
Correct |
361 ms |
60228 KB |
Output is correct |
33 |
Correct |
53 ms |
1076 KB |
Output is correct |
34 |
Correct |
93 ms |
6516 KB |
Output is correct |
35 |
Correct |
348 ms |
60136 KB |
Output is correct |
36 |
Correct |
398 ms |
60216 KB |
Output is correct |
37 |
Correct |
294 ms |
67944 KB |
Output is correct |
38 |
Correct |
659 ms |
111032 KB |
Output is correct |
39 |
Correct |
369 ms |
62772 KB |
Output is correct |
40 |
Correct |
329 ms |
60228 KB |
Output is correct |
41 |
Correct |
379 ms |
60484 KB |
Output is correct |
42 |
Correct |
337 ms |
64828 KB |
Output is correct |
43 |
Correct |
338 ms |
83660 KB |
Output is correct |
44 |
Correct |
30 ms |
1256 KB |
Output is correct |
45 |
Correct |
59 ms |
1296 KB |
Output is correct |
46 |
Correct |
93 ms |
1356 KB |
Output is correct |
47 |
Correct |
146 ms |
1296 KB |
Output is correct |
48 |
Correct |
181 ms |
2028 KB |
Output is correct |
49 |
Correct |
604 ms |
68312 KB |
Output is correct |
50 |
Correct |
584 ms |
68384 KB |
Output is correct |
51 |
Correct |
579 ms |
68344 KB |
Output is correct |
52 |
Correct |
689 ms |
68332 KB |
Output is correct |
53 |
Correct |
547 ms |
68356 KB |
Output is correct |
54 |
Correct |
556 ms |
68336 KB |
Output is correct |
55 |
Correct |
543 ms |
68348 KB |
Output is correct |
56 |
Correct |
105 ms |
1332 KB |
Output is correct |
57 |
Correct |
248 ms |
1248 KB |
Output is correct |
58 |
Correct |
549 ms |
2012 KB |
Output is correct |
59 |
Correct |
1169 ms |
60600 KB |
Output is correct |
60 |
Correct |
1364 ms |
60604 KB |
Output is correct |
61 |
Correct |
977 ms |
60492 KB |
Output is correct |
62 |
Correct |
771 ms |
64532 KB |
Output is correct |
63 |
Correct |
1010 ms |
79668 KB |
Output is correct |
64 |
Correct |
1067 ms |
77940 KB |
Output is correct |
65 |
Correct |
1034 ms |
77232 KB |
Output is correct |
66 |
Correct |
1100 ms |
77492 KB |
Output is correct |
67 |
Correct |
1004 ms |
81808 KB |
Output is correct |
68 |
Correct |
773 ms |
91460 KB |
Output is correct |
69 |
Correct |
1196 ms |
100556 KB |
Output is correct |