#include "seats.h"
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
struct node{
int s, k, ob;
node(){
s = 1e9;
k = ob = 0;
}
node (node a, node b){
s = min(a.s, b.s);
k = ob = 0;
if (a.s == s)k += a.k;
if (b.s == s)k += b.k;
}
};
vector < vector < int > > aa;
int n, m, t, sz;
pair < int, int > p[N];
node tree[N * 4];
inline node mrg(node a, node b){
node c;
c.s = min(a.s, b.s);
c.k = c.ob = 0;
if (a.s == c.s)c.k += a.k;
if (b.s == c.s)c.k += b.k;
return c;
}
inline void push(int v, int l, int r){
if (tree[v].ob == 0)return;
tree[v].s += tree[v].ob;
if (l != r){
tree[v + v].ob += tree[v].ob;
tree[v + v + 1].ob += tree[v].ob;
}
tree[v].ob = 0;
}
inline void add(int v, int l, int r, int ll, int rr, int x){
push(v, l, r);
if (l > r || ll > rr || l > rr || r < ll)return;
if (l >= ll && r <= rr){
tree[v].ob = x;
push(v, l, r);
return;
}
int mid = (l + r) / 2;
add(v + v, l, mid, ll, rr, x);
add(v + v + 1, mid + 1, r, ll, rr, x);
tree[v] = mrg(tree[v + v], tree[v + v + 1]);
}
inline node get(int v, int l, int r, int ll, int rr){
push(v, l, r);
if (l > r || ll > rr || l > rr || r < ll)return node();
if (l >= ll && r <= rr)return tree[v];
int mid = (l + r) / 2;
node x = get(v + v, l, mid, ll, rr), y = get(v + v + 1, mid + 1, r, ll, rr);
tree[v] = mrg(tree[v + v], tree[v + v + 1]);
return mrg(x, y);
}
void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) {
n = H, m = W;
t = n * m;
sz = 1;
while (sz < t){
sz *= 2;
}
for (int i = sz; i <= sz + t - 1; ++i){
tree[i].k = 1;
tree[i].s = 0;
}
for (int i = sz - 1; i > 0; --i){
tree[i].s = 0;
tree[i].k = tree[i + i].k + tree[i + i + 1].k;
}
aa.resize(n + 2);
aa[0].resize(m + 2, t);
for (int i = 1; i <= n; ++i){
aa[i].resize(m + 2);
aa[i][0] = t;
aa[i][m + 1] = t;
}
aa[n + 1].resize(m + 2, t);
for (int i = 0; i < t; ++i){
aa[R[i] + 1][C[i] + 1] = i;
p[i + 1] = make_pair(R[i] + 1, C[i] + 1);
}
vector < int > b;
b.resize(4);
for (int i = 1; i <= n + 1; ++i){
for (int j = 1; j <= m + 1; ++j){
b[0] = aa[i - 1][j - 1], b[1] = aa[i][j - 1], b[2] = aa[i - 1][j], b[3] = aa[i][j];
sort(b.begin(), b.end());
add(1, sz, sz + sz - 1, sz + b[0], sz + b[1] - 1, 1);
add(1, sz, sz + sz - 1, sz + b[2], sz + b[3] - 1, 1);
}
}
}
int swap_seats(int a, int b) {
a++;
b++;
//cout <<a<<" "<<b<<" "<<" "<<p[a].first<<" "<<p[a].second<<" "<<p[b].first<<" "<<p[b].second<<endl;
vector < pair < int, int > > c;
c.push_back(make_pair(p[a].first, p[a].second));
c.push_back(make_pair(p[a].first + 1, p[a].second));
c.push_back(make_pair(p[a].first, p[a].second + 1));
c.push_back(make_pair(p[a].first + 1, p[a].second + 1));
c.push_back(make_pair(p[b].first, p[b].second));
c.push_back(make_pair(p[b].first + 1, p[b].second));
c.push_back(make_pair(p[b].first, p[b].second + 1));
c.push_back(make_pair(p[b].first + 1, p[b].second + 1));
sort(c.begin(), c.end());
c.erase(unique(c.begin(), c.end()), c.end());
vector < int > bb;
bb.resize(4);
for (int e = 0; e < c.size(); ++e){
int i = c[e].first, j = c[e].second;
bb[0] = aa[i - 1][j - 1], bb[1] = aa[i][j - 1], bb[2] = aa[i - 1][j], bb[3] = aa[i][j];
sort(bb.begin(), bb.end());
add(1, sz, sz + sz - 1, sz + bb[0], sz + bb[1] - 1, -1);
add(1, sz, sz + sz - 1, sz + bb[2], sz + bb[3] - 1, -1);
}
//return 0;
swap(aa[p[a].first][p[a].second], aa[p[b].first][p[b].second]);
swap(p[a], p[b]);
for (int e = 0; e < c.size(); ++e){
int i = c[e].first, j = c[e].second;
bb[0] = aa[i - 1][j - 1], bb[1] = aa[i][j - 1], bb[2] = aa[i - 1][j], bb[3] = aa[i][j];
sort(bb.begin(), bb.end());
add(1, sz, sz + sz - 1, sz + bb[0], sz + bb[1] - 1, 1);
add(1, sz, sz + sz - 1, sz + bb[2], sz + bb[3] - 1, 1);
}
node v = get(1, sz, sz + sz - 1, sz, sz + t - 1);
//cout <<v.s<<" "<<v.k<<endl;
if (v.s == 4)return v.k;else return 0;
}
Compilation message
seats.cpp: In function 'int swap_seats(int, int)':
seats.cpp:123:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int e = 0; e < c.size(); ++e){
~~^~~~~~~~~~
seats.cpp:133:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int e = 0; e < c.size(); ++e){
~~^~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
58 ms |
47480 KB |
Output is correct |
2 |
Correct |
69 ms |
47596 KB |
Output is correct |
3 |
Correct |
84 ms |
47604 KB |
Output is correct |
4 |
Correct |
73 ms |
47640 KB |
Output is correct |
5 |
Correct |
65 ms |
47704 KB |
Output is correct |
6 |
Correct |
81 ms |
47724 KB |
Output is correct |
7 |
Correct |
84 ms |
47764 KB |
Output is correct |
8 |
Correct |
77 ms |
47848 KB |
Output is correct |
9 |
Correct |
82 ms |
47924 KB |
Output is correct |
10 |
Correct |
86 ms |
48056 KB |
Output is correct |
11 |
Correct |
81 ms |
48056 KB |
Output is correct |
12 |
Correct |
68 ms |
48056 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
58 ms |
47480 KB |
Output is correct |
2 |
Correct |
69 ms |
47596 KB |
Output is correct |
3 |
Correct |
84 ms |
47604 KB |
Output is correct |
4 |
Correct |
73 ms |
47640 KB |
Output is correct |
5 |
Correct |
65 ms |
47704 KB |
Output is correct |
6 |
Correct |
81 ms |
47724 KB |
Output is correct |
7 |
Correct |
84 ms |
47764 KB |
Output is correct |
8 |
Correct |
77 ms |
47848 KB |
Output is correct |
9 |
Correct |
82 ms |
47924 KB |
Output is correct |
10 |
Correct |
86 ms |
48056 KB |
Output is correct |
11 |
Correct |
81 ms |
48056 KB |
Output is correct |
12 |
Correct |
68 ms |
48056 KB |
Output is correct |
13 |
Correct |
130 ms |
48552 KB |
Output is correct |
14 |
Correct |
160 ms |
48552 KB |
Output is correct |
15 |
Correct |
103 ms |
48552 KB |
Output is correct |
16 |
Correct |
91 ms |
49008 KB |
Output is correct |
17 |
Correct |
133 ms |
49008 KB |
Output is correct |
18 |
Correct |
109 ms |
49008 KB |
Output is correct |
19 |
Correct |
109 ms |
49008 KB |
Output is correct |
20 |
Correct |
100 ms |
49088 KB |
Output is correct |
21 |
Correct |
84 ms |
49120 KB |
Output is correct |
22 |
Correct |
87 ms |
49772 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2760 ms |
79324 KB |
Output is correct |
2 |
Correct |
1346 ms |
79324 KB |
Output is correct |
3 |
Correct |
1237 ms |
79372 KB |
Output is correct |
4 |
Correct |
1051 ms |
79372 KB |
Output is correct |
5 |
Correct |
1237 ms |
79372 KB |
Output is correct |
6 |
Correct |
1070 ms |
79372 KB |
Output is correct |
7 |
Correct |
1129 ms |
80192 KB |
Output is correct |
8 |
Correct |
1148 ms |
80852 KB |
Output is correct |
9 |
Correct |
1291 ms |
80968 KB |
Output is correct |
10 |
Correct |
1147 ms |
80968 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
132 ms |
80968 KB |
Output is correct |
2 |
Correct |
237 ms |
80968 KB |
Output is correct |
3 |
Correct |
1150 ms |
80968 KB |
Output is correct |
4 |
Correct |
2641 ms |
80968 KB |
Output is correct |
5 |
Correct |
962 ms |
88672 KB |
Output is correct |
6 |
Correct |
2714 ms |
131912 KB |
Output is correct |
7 |
Correct |
1070 ms |
131912 KB |
Output is correct |
8 |
Correct |
1347 ms |
131912 KB |
Output is correct |
9 |
Correct |
1166 ms |
131912 KB |
Output is correct |
10 |
Correct |
1174 ms |
131912 KB |
Output is correct |
11 |
Correct |
1112 ms |
131912 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
113 ms |
131912 KB |
Output is correct |
2 |
Correct |
180 ms |
131912 KB |
Output is correct |
3 |
Correct |
288 ms |
131912 KB |
Output is correct |
4 |
Correct |
320 ms |
131912 KB |
Output is correct |
5 |
Correct |
517 ms |
131912 KB |
Output is correct |
6 |
Correct |
1589 ms |
131912 KB |
Output is correct |
7 |
Correct |
1907 ms |
131912 KB |
Output is correct |
8 |
Correct |
1508 ms |
131912 KB |
Output is correct |
9 |
Correct |
3573 ms |
131912 KB |
Output is correct |
10 |
Correct |
1444 ms |
131912 KB |
Output is correct |
11 |
Correct |
1474 ms |
131912 KB |
Output is correct |
12 |
Correct |
1526 ms |
131912 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
58 ms |
47480 KB |
Output is correct |
2 |
Correct |
69 ms |
47596 KB |
Output is correct |
3 |
Correct |
84 ms |
47604 KB |
Output is correct |
4 |
Correct |
73 ms |
47640 KB |
Output is correct |
5 |
Correct |
65 ms |
47704 KB |
Output is correct |
6 |
Correct |
81 ms |
47724 KB |
Output is correct |
7 |
Correct |
84 ms |
47764 KB |
Output is correct |
8 |
Correct |
77 ms |
47848 KB |
Output is correct |
9 |
Correct |
82 ms |
47924 KB |
Output is correct |
10 |
Correct |
86 ms |
48056 KB |
Output is correct |
11 |
Correct |
81 ms |
48056 KB |
Output is correct |
12 |
Correct |
68 ms |
48056 KB |
Output is correct |
13 |
Correct |
130 ms |
48552 KB |
Output is correct |
14 |
Correct |
160 ms |
48552 KB |
Output is correct |
15 |
Correct |
103 ms |
48552 KB |
Output is correct |
16 |
Correct |
91 ms |
49008 KB |
Output is correct |
17 |
Correct |
133 ms |
49008 KB |
Output is correct |
18 |
Correct |
109 ms |
49008 KB |
Output is correct |
19 |
Correct |
109 ms |
49008 KB |
Output is correct |
20 |
Correct |
100 ms |
49088 KB |
Output is correct |
21 |
Correct |
84 ms |
49120 KB |
Output is correct |
22 |
Correct |
87 ms |
49772 KB |
Output is correct |
23 |
Correct |
2760 ms |
79324 KB |
Output is correct |
24 |
Correct |
1346 ms |
79324 KB |
Output is correct |
25 |
Correct |
1237 ms |
79372 KB |
Output is correct |
26 |
Correct |
1051 ms |
79372 KB |
Output is correct |
27 |
Correct |
1237 ms |
79372 KB |
Output is correct |
28 |
Correct |
1070 ms |
79372 KB |
Output is correct |
29 |
Correct |
1129 ms |
80192 KB |
Output is correct |
30 |
Correct |
1148 ms |
80852 KB |
Output is correct |
31 |
Correct |
1291 ms |
80968 KB |
Output is correct |
32 |
Correct |
1147 ms |
80968 KB |
Output is correct |
33 |
Correct |
132 ms |
80968 KB |
Output is correct |
34 |
Correct |
237 ms |
80968 KB |
Output is correct |
35 |
Correct |
1150 ms |
80968 KB |
Output is correct |
36 |
Correct |
2641 ms |
80968 KB |
Output is correct |
37 |
Correct |
962 ms |
88672 KB |
Output is correct |
38 |
Correct |
2714 ms |
131912 KB |
Output is correct |
39 |
Correct |
1070 ms |
131912 KB |
Output is correct |
40 |
Correct |
1347 ms |
131912 KB |
Output is correct |
41 |
Correct |
1166 ms |
131912 KB |
Output is correct |
42 |
Correct |
1174 ms |
131912 KB |
Output is correct |
43 |
Correct |
1112 ms |
131912 KB |
Output is correct |
44 |
Correct |
113 ms |
131912 KB |
Output is correct |
45 |
Correct |
180 ms |
131912 KB |
Output is correct |
46 |
Correct |
288 ms |
131912 KB |
Output is correct |
47 |
Correct |
320 ms |
131912 KB |
Output is correct |
48 |
Correct |
517 ms |
131912 KB |
Output is correct |
49 |
Correct |
1589 ms |
131912 KB |
Output is correct |
50 |
Correct |
1907 ms |
131912 KB |
Output is correct |
51 |
Correct |
1508 ms |
131912 KB |
Output is correct |
52 |
Correct |
3573 ms |
131912 KB |
Output is correct |
53 |
Correct |
1444 ms |
131912 KB |
Output is correct |
54 |
Correct |
1474 ms |
131912 KB |
Output is correct |
55 |
Correct |
1526 ms |
131912 KB |
Output is correct |
56 |
Correct |
214 ms |
131912 KB |
Output is correct |
57 |
Correct |
491 ms |
131912 KB |
Output is correct |
58 |
Correct |
763 ms |
131912 KB |
Output is correct |
59 |
Correct |
2245 ms |
131912 KB |
Output is correct |
60 |
Execution timed out |
4099 ms |
131912 KB |
Time limit exceeded |
61 |
Halted |
0 ms |
0 KB |
- |