#include <stdio.h>
#include <stdlib.h>
#define N 300000
#define Q 300000
#define N_ (1 << 19) /* N_ = pow2(ceil(log2(Q))) */
#define INF 0x3f3f3f3f
int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }
unsigned int X = 12345;
int rand_() {
return (X *= 3) >> 1;
}
int xx[N], gg[N], n;
int yy[Q], yy_[Q], tt_[Q], tt1[Q], q_;
int compareh_y(int h1, int h2) {
return yy[h1] - yy[h2];
}
int compareh_t(int h1, int h2) {
return tt_[h1] - tt_[h2];
}
int compare_i(int i, int j) {
return gg[i] != gg[j] ? gg[i] - gg[j] : xx[i] - xx[j];
}
int (*compare)(int, int);
void sort(int *ii, int l, int r) {
while (l < r) {
int i = l, j = l, k = r, i_ = ii[l + rand_() % (r - l)], tmp;
while (j < k) {
int c = compare(ii[j], i_);
if (c == 0)
j++;
else if (c < 0) {
tmp = ii[i], ii[i] = ii[j], ii[j] = tmp;
i++, j++;
} else {
k--;
tmp = ii[j], ii[j] = ii[k], ii[k] = tmp;
}
}
sort(ii, l, i);
l = k;
}
}
int idx(int *xx, int x) {
int lower = -1, upper = q_;
while (upper - lower > 1) {
int h = (lower + upper) / 2;
if (xx[h] <= x)
lower = h;
else
upper = h;
}
return lower;
}
int *stmn[N_ * 2], *stmx[N_ * 2], eo[N_ * 2], eo1[N_ * 2], *ei[N_ * 2], eo_[N_ * 2], n_;
void push(int i, int x) {
int o = eo[i]++;
if (o == eo1[i]) {
eo1[i] *= 2;
stmn[i] = (int *) realloc(stmn[i], eo1[i] * sizeof *stmn[i]);
stmx[i] = (int *) realloc(stmx[i], eo1[i] * sizeof *stmx[i]);
}
stmn[i][o] = min(o == 0 ? INF : stmn[i][o - 1], x);
stmx[i][o] = max(o == 0 ? -INF : stmx[i][o - 1], x);
}
void pop(int i) {
eo[i]--;
}
int getmin(int i) {
return eo[i] == 0 ? INF : stmn[i][eo[i] - 1];
}
int getmax(int i) {
return eo[i] == 0 ? -INF : stmx[i][eo[i] - 1];
}
void build() {
int i;
n_ = 1;
while (n_ < q_)
n_ <<= 1;
for (i = 1; i < n_ * 2; i++) {
eo1[i] = 2;
stmn[i] = (int *) malloc(eo1[i] * sizeof *stmn[i]);
stmx[i] = (int *) malloc(eo1[i] * sizeof *stmx[i]);
}
for (i = 1; i < n_ * 2; i++)
ei[i] = (int *) malloc(2 * sizeof *ei[i]);
}
void update(int l, int r, int x) {
for (l += n_, r += n_; l <= r; l >>= 1, r >>= 1) {
if ((l & 1) == 1)
push(l++, x);
if ((r & 1) == 0)
push(r--, x);
}
}
void undo(int l, int r) {
for (l += n_, r += n_; l <= r; l >>= 1, r >>= 1) {
if ((l & 1) == 1)
pop(l++);
if ((r & 1) == 0)
pop(r--);
}
}
int query(int i) {
int y, l, r;
l = r = y = yy_[i];
for (i += n_; i > 0; i >>= 1)
l = min(l, getmin(i)), r = max(r, getmax(i));
return l == -INF || r == INF ? -1 : max(y - l, r - y);
}
int mid(int a, int b) {
return a + b > 0 ? (a + b) / 2 : -(-a + b + 1) / 2;
}
int pp[N], qq[N];
void remove_(int i) {
int p = pp[i], q = qq[i];
if (p != -1)
qq[p] = q;
if (q != -1)
pp[q] = p;
if (p == -1 && q == -1)
update(0, q_ - 1, INF), update(0, q_ - 1, -INF);
else if (p == -1)
update(0, idx(yy_, xx[q]), xx[q]);
else if (q == -1)
update(idx(yy_, xx[p] - 1) + 1, q_ - 1, xx[p]);
else {
int l = idx(yy_, xx[p] - 1) + 1, h = idx(yy_, mid(xx[p], xx[q])), r = idx(yy_, xx[q]);
update(l, h, xx[p]), update(h + 1, r, xx[q]);
}
}
void add(int i) {
int p = pp[i], q = qq[i];
if (p != -1)
qq[p] = i;
if (q != -1)
pp[q] = i;
if (p == -1 && q == -1)
undo(0, q_ - 1), undo(0, q_ - 1);
else if (p == -1)
undo(0, idx(yy_, xx[q]));
else if (q == -1)
undo(idx(yy_, xx[p] - 1) + 1, q_ - 1);
else {
int l = idx(yy_, xx[p] - 1) + 1, h = idx(yy_, mid(xx[p], xx[q])), r = idx(yy_, xx[q]);
undo(l, h), undo(h + 1, r);
}
}
void append_(int i, int i_) {
int o = eo_[i]++;
if (o >= 2 && (o & o - 1) == 0)
ei[i] = (int *) realloc(ei[i], o * 2 * sizeof *ei[i]);
ei[i][o] = i_;
}
void update_(int l, int r, int i_) {
for (l += n_, r += n_; l <= r; l >>= 1, r >>= 1) {
if ((l & 1) == 1)
append_(l++, i_);
if ((r & 1) == 0)
append_(r--, i_);
}
}
int hh[Q], inv[Q], ans[Q];
void solve(int i) {
int o;
for (o = eo_[i]; o--; ) {
int i_ = ei[i][o];
remove_(i_);
}
if (i >= n_) {
int h = i - n_;
if (h < q_)
ans[hh[h]] = query(inv[hh[h]]);
} else
solve(i << 1 | 0), solve(i << 1 | 1);
for (o = 0; o < eo_[i]; o++) {
int i_ = ei[i][o];
add(i_);
}
}
int main() {
static int tt[N * 2], ii[N], ll[N], rr[N];
static char used[N];
int k, g, h, i;
scanf("%d%d%d", &n, &k, &q_);
for (i = 0; i < n; i++) {
scanf("%d%d%d%d", &xx[i], &gg[i], &tt[i << 1 | 0], &tt[i << 1 | 1]), gg[i]--;
used[gg[i]] = 1;
}
for (g = 0; g < k; g++)
if (!used[g]) {
for (h = 0; h < q_; h++)
printf("-1\n");
return 0;
}
for (h = 0; h < q_; h++)
scanf("%d%d", &yy[h], &tt_[h]);
for (h = 0; h < q_; h++)
hh[h] = h;
compare = compareh_y, sort(hh, 0, q_);
for (h = 0; h < q_; h++)
yy_[h] = yy[hh[h]], inv[hh[h]] = h;
for (i = 0; i < n; i++)
ii[i] = i;
compare = compare_i, sort(ii, 0, n);
pp[ii[0]] = -1, qq[ii[n - 1]] = -1;
ll[0] = 0, rr[n - 1] = q_ - 1;
for (h = 0; h + 1 < n; h++)
if (gg[ii[h]] == gg[ii[h + 1]]) {
int h_ = idx(yy_, mid(xx[ii[h]], xx[ii[h + 1]]));
qq[ii[h]] = ii[h + 1], pp[ii[h + 1]] = ii[h];
rr[h] = h_, ll[h + 1] = h_ + 1;
} else {
qq[ii[h]] = -1, pp[ii[h + 1]] = -1;
rr[h] = q_ - 1, ll[h + 1] = 0;
}
build();
for (h = 0; h < n; h++)
if (ll[h] <= rr[h])
update(ll[h], rr[h], xx[ii[h]]);
compare = compareh_t, sort(hh, 0, q_);
for (h = 0; h < q_; h++)
tt1[h] = tt_[hh[h]];
for (i = 0; i < n; i++)
update_(0, idx(tt1, tt[i << 1 | 0] - 1), i), update_(idx(tt1, tt[i << 1 | 1]) + 1, n_ - 1, i);
solve(1);
for (h = 0; h < q_; h++)
printf("%d\n", ans[h]);
return 0;
}
Compilation message
new_home.c: In function 'append_':
new_home.c:188:23: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
188 | if (o >= 2 && (o & o - 1) == 0)
| ~~^~~
new_home.c: In function 'main':
new_home.c:231:2: warning: ignoring return value of 'scanf', declared with attribute warn_unused_result [-Wunused-result]
231 | scanf("%d%d%d", &n, &k, &q_);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
new_home.c:233:3: warning: ignoring return value of 'scanf', declared with attribute warn_unused_result [-Wunused-result]
233 | scanf("%d%d%d%d", &xx[i], &gg[i], &tt[i << 1 | 0], &tt[i << 1 | 1]), gg[i]--;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
new_home.c:243:3: warning: ignoring return value of 'scanf', declared with attribute warn_unused_result [-Wunused-result]
243 | scanf("%d%d", &yy[h], &tt_[h]);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
492 KB |
Output is correct |
2 |
Correct |
1 ms |
492 KB |
Output is correct |
3 |
Correct |
1 ms |
364 KB |
Output is correct |
4 |
Correct |
1 ms |
492 KB |
Output is correct |
5 |
Correct |
3 ms |
620 KB |
Output is correct |
6 |
Correct |
4 ms |
620 KB |
Output is correct |
7 |
Correct |
2 ms |
620 KB |
Output is correct |
8 |
Correct |
3 ms |
620 KB |
Output is correct |
9 |
Correct |
2 ms |
620 KB |
Output is correct |
10 |
Correct |
3 ms |
620 KB |
Output is correct |
11 |
Correct |
3 ms |
620 KB |
Output is correct |
12 |
Correct |
3 ms |
620 KB |
Output is correct |
13 |
Correct |
3 ms |
620 KB |
Output is correct |
14 |
Correct |
3 ms |
620 KB |
Output is correct |
15 |
Correct |
3 ms |
620 KB |
Output is correct |
16 |
Correct |
3 ms |
620 KB |
Output is correct |
17 |
Correct |
3 ms |
620 KB |
Output is correct |
18 |
Correct |
3 ms |
620 KB |
Output is correct |
19 |
Correct |
3 ms |
620 KB |
Output is correct |
20 |
Correct |
3 ms |
620 KB |
Output is correct |
21 |
Correct |
2 ms |
620 KB |
Output is correct |
22 |
Correct |
2 ms |
620 KB |
Output is correct |
23 |
Correct |
3 ms |
620 KB |
Output is correct |
24 |
Correct |
3 ms |
620 KB |
Output is correct |
25 |
Correct |
3 ms |
620 KB |
Output is correct |
26 |
Correct |
3 ms |
620 KB |
Output is correct |
27 |
Correct |
3 ms |
640 KB |
Output is correct |
28 |
Correct |
3 ms |
620 KB |
Output is correct |
29 |
Correct |
5 ms |
640 KB |
Output is correct |
30 |
Correct |
3 ms |
620 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
492 KB |
Output is correct |
2 |
Correct |
1 ms |
492 KB |
Output is correct |
3 |
Correct |
1 ms |
364 KB |
Output is correct |
4 |
Correct |
1 ms |
492 KB |
Output is correct |
5 |
Correct |
3 ms |
620 KB |
Output is correct |
6 |
Correct |
4 ms |
620 KB |
Output is correct |
7 |
Correct |
2 ms |
620 KB |
Output is correct |
8 |
Correct |
3 ms |
620 KB |
Output is correct |
9 |
Correct |
2 ms |
620 KB |
Output is correct |
10 |
Correct |
3 ms |
620 KB |
Output is correct |
11 |
Correct |
3 ms |
620 KB |
Output is correct |
12 |
Correct |
3 ms |
620 KB |
Output is correct |
13 |
Correct |
3 ms |
620 KB |
Output is correct |
14 |
Correct |
3 ms |
620 KB |
Output is correct |
15 |
Correct |
3 ms |
620 KB |
Output is correct |
16 |
Correct |
3 ms |
620 KB |
Output is correct |
17 |
Correct |
3 ms |
620 KB |
Output is correct |
18 |
Correct |
3 ms |
620 KB |
Output is correct |
19 |
Correct |
3 ms |
620 KB |
Output is correct |
20 |
Correct |
3 ms |
620 KB |
Output is correct |
21 |
Correct |
2 ms |
620 KB |
Output is correct |
22 |
Correct |
2 ms |
620 KB |
Output is correct |
23 |
Correct |
3 ms |
620 KB |
Output is correct |
24 |
Correct |
3 ms |
620 KB |
Output is correct |
25 |
Correct |
3 ms |
620 KB |
Output is correct |
26 |
Correct |
3 ms |
620 KB |
Output is correct |
27 |
Correct |
3 ms |
640 KB |
Output is correct |
28 |
Correct |
3 ms |
620 KB |
Output is correct |
29 |
Correct |
5 ms |
640 KB |
Output is correct |
30 |
Correct |
3 ms |
620 KB |
Output is correct |
31 |
Correct |
2226 ms |
44320 KB |
Output is correct |
32 |
Correct |
863 ms |
31852 KB |
Output is correct |
33 |
Correct |
1606 ms |
34412 KB |
Output is correct |
34 |
Correct |
2395 ms |
44836 KB |
Output is correct |
35 |
Correct |
2094 ms |
41436 KB |
Output is correct |
36 |
Correct |
1520 ms |
34540 KB |
Output is correct |
37 |
Correct |
1286 ms |
36920 KB |
Output is correct |
38 |
Correct |
1020 ms |
30956 KB |
Output is correct |
39 |
Correct |
904 ms |
32748 KB |
Output is correct |
40 |
Correct |
879 ms |
30828 KB |
Output is correct |
41 |
Correct |
1867 ms |
47340 KB |
Output is correct |
42 |
Correct |
1904 ms |
47172 KB |
Output is correct |
43 |
Correct |
220 ms |
22248 KB |
Output is correct |
44 |
Correct |
1981 ms |
47416 KB |
Output is correct |
45 |
Correct |
1943 ms |
44688 KB |
Output is correct |
46 |
Correct |
1903 ms |
40368 KB |
Output is correct |
47 |
Correct |
791 ms |
42284 KB |
Output is correct |
48 |
Correct |
754 ms |
36236 KB |
Output is correct |
49 |
Correct |
908 ms |
38252 KB |
Output is correct |
50 |
Correct |
1006 ms |
45892 KB |
Output is correct |
51 |
Correct |
956 ms |
36332 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
5091 ms |
246948 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
5056 ms |
219216 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
492 KB |
Output is correct |
2 |
Correct |
1 ms |
492 KB |
Output is correct |
3 |
Correct |
1 ms |
364 KB |
Output is correct |
4 |
Correct |
1 ms |
492 KB |
Output is correct |
5 |
Correct |
3 ms |
620 KB |
Output is correct |
6 |
Correct |
4 ms |
620 KB |
Output is correct |
7 |
Correct |
2 ms |
620 KB |
Output is correct |
8 |
Correct |
3 ms |
620 KB |
Output is correct |
9 |
Correct |
2 ms |
620 KB |
Output is correct |
10 |
Correct |
3 ms |
620 KB |
Output is correct |
11 |
Correct |
3 ms |
620 KB |
Output is correct |
12 |
Correct |
3 ms |
620 KB |
Output is correct |
13 |
Correct |
3 ms |
620 KB |
Output is correct |
14 |
Correct |
3 ms |
620 KB |
Output is correct |
15 |
Correct |
3 ms |
620 KB |
Output is correct |
16 |
Correct |
3 ms |
620 KB |
Output is correct |
17 |
Correct |
3 ms |
620 KB |
Output is correct |
18 |
Correct |
3 ms |
620 KB |
Output is correct |
19 |
Correct |
3 ms |
620 KB |
Output is correct |
20 |
Correct |
3 ms |
620 KB |
Output is correct |
21 |
Correct |
2 ms |
620 KB |
Output is correct |
22 |
Correct |
2 ms |
620 KB |
Output is correct |
23 |
Correct |
3 ms |
620 KB |
Output is correct |
24 |
Correct |
3 ms |
620 KB |
Output is correct |
25 |
Correct |
3 ms |
620 KB |
Output is correct |
26 |
Correct |
3 ms |
620 KB |
Output is correct |
27 |
Correct |
3 ms |
640 KB |
Output is correct |
28 |
Correct |
3 ms |
620 KB |
Output is correct |
29 |
Correct |
5 ms |
640 KB |
Output is correct |
30 |
Correct |
3 ms |
620 KB |
Output is correct |
31 |
Correct |
2226 ms |
44320 KB |
Output is correct |
32 |
Correct |
863 ms |
31852 KB |
Output is correct |
33 |
Correct |
1606 ms |
34412 KB |
Output is correct |
34 |
Correct |
2395 ms |
44836 KB |
Output is correct |
35 |
Correct |
2094 ms |
41436 KB |
Output is correct |
36 |
Correct |
1520 ms |
34540 KB |
Output is correct |
37 |
Correct |
1286 ms |
36920 KB |
Output is correct |
38 |
Correct |
1020 ms |
30956 KB |
Output is correct |
39 |
Correct |
904 ms |
32748 KB |
Output is correct |
40 |
Correct |
879 ms |
30828 KB |
Output is correct |
41 |
Correct |
1867 ms |
47340 KB |
Output is correct |
42 |
Correct |
1904 ms |
47172 KB |
Output is correct |
43 |
Correct |
220 ms |
22248 KB |
Output is correct |
44 |
Correct |
1981 ms |
47416 KB |
Output is correct |
45 |
Correct |
1943 ms |
44688 KB |
Output is correct |
46 |
Correct |
1903 ms |
40368 KB |
Output is correct |
47 |
Correct |
791 ms |
42284 KB |
Output is correct |
48 |
Correct |
754 ms |
36236 KB |
Output is correct |
49 |
Correct |
908 ms |
38252 KB |
Output is correct |
50 |
Correct |
1006 ms |
45892 KB |
Output is correct |
51 |
Correct |
956 ms |
36332 KB |
Output is correct |
52 |
Correct |
375 ms |
36084 KB |
Output is correct |
53 |
Correct |
369 ms |
35668 KB |
Output is correct |
54 |
Correct |
1279 ms |
40012 KB |
Output is correct |
55 |
Correct |
1347 ms |
43776 KB |
Output is correct |
56 |
Correct |
1056 ms |
41908 KB |
Output is correct |
57 |
Correct |
1735 ms |
46184 KB |
Output is correct |
58 |
Correct |
1352 ms |
44268 KB |
Output is correct |
59 |
Correct |
1100 ms |
41924 KB |
Output is correct |
60 |
Correct |
1702 ms |
46188 KB |
Output is correct |
61 |
Correct |
153 ms |
32468 KB |
Output is correct |
62 |
Correct |
347 ms |
35828 KB |
Output is correct |
63 |
Correct |
845 ms |
38380 KB |
Output is correct |
64 |
Correct |
1031 ms |
39916 KB |
Output is correct |
65 |
Correct |
1533 ms |
46060 KB |
Output is correct |
66 |
Correct |
1963 ms |
48364 KB |
Output is correct |
67 |
Correct |
1089 ms |
46264 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
492 KB |
Output is correct |
2 |
Correct |
1 ms |
492 KB |
Output is correct |
3 |
Correct |
1 ms |
364 KB |
Output is correct |
4 |
Correct |
1 ms |
492 KB |
Output is correct |
5 |
Correct |
3 ms |
620 KB |
Output is correct |
6 |
Correct |
4 ms |
620 KB |
Output is correct |
7 |
Correct |
2 ms |
620 KB |
Output is correct |
8 |
Correct |
3 ms |
620 KB |
Output is correct |
9 |
Correct |
2 ms |
620 KB |
Output is correct |
10 |
Correct |
3 ms |
620 KB |
Output is correct |
11 |
Correct |
3 ms |
620 KB |
Output is correct |
12 |
Correct |
3 ms |
620 KB |
Output is correct |
13 |
Correct |
3 ms |
620 KB |
Output is correct |
14 |
Correct |
3 ms |
620 KB |
Output is correct |
15 |
Correct |
3 ms |
620 KB |
Output is correct |
16 |
Correct |
3 ms |
620 KB |
Output is correct |
17 |
Correct |
3 ms |
620 KB |
Output is correct |
18 |
Correct |
3 ms |
620 KB |
Output is correct |
19 |
Correct |
3 ms |
620 KB |
Output is correct |
20 |
Correct |
3 ms |
620 KB |
Output is correct |
21 |
Correct |
2 ms |
620 KB |
Output is correct |
22 |
Correct |
2 ms |
620 KB |
Output is correct |
23 |
Correct |
3 ms |
620 KB |
Output is correct |
24 |
Correct |
3 ms |
620 KB |
Output is correct |
25 |
Correct |
3 ms |
620 KB |
Output is correct |
26 |
Correct |
3 ms |
620 KB |
Output is correct |
27 |
Correct |
3 ms |
640 KB |
Output is correct |
28 |
Correct |
3 ms |
620 KB |
Output is correct |
29 |
Correct |
5 ms |
640 KB |
Output is correct |
30 |
Correct |
3 ms |
620 KB |
Output is correct |
31 |
Correct |
2226 ms |
44320 KB |
Output is correct |
32 |
Correct |
863 ms |
31852 KB |
Output is correct |
33 |
Correct |
1606 ms |
34412 KB |
Output is correct |
34 |
Correct |
2395 ms |
44836 KB |
Output is correct |
35 |
Correct |
2094 ms |
41436 KB |
Output is correct |
36 |
Correct |
1520 ms |
34540 KB |
Output is correct |
37 |
Correct |
1286 ms |
36920 KB |
Output is correct |
38 |
Correct |
1020 ms |
30956 KB |
Output is correct |
39 |
Correct |
904 ms |
32748 KB |
Output is correct |
40 |
Correct |
879 ms |
30828 KB |
Output is correct |
41 |
Correct |
1867 ms |
47340 KB |
Output is correct |
42 |
Correct |
1904 ms |
47172 KB |
Output is correct |
43 |
Correct |
220 ms |
22248 KB |
Output is correct |
44 |
Correct |
1981 ms |
47416 KB |
Output is correct |
45 |
Correct |
1943 ms |
44688 KB |
Output is correct |
46 |
Correct |
1903 ms |
40368 KB |
Output is correct |
47 |
Correct |
791 ms |
42284 KB |
Output is correct |
48 |
Correct |
754 ms |
36236 KB |
Output is correct |
49 |
Correct |
908 ms |
38252 KB |
Output is correct |
50 |
Correct |
1006 ms |
45892 KB |
Output is correct |
51 |
Correct |
956 ms |
36332 KB |
Output is correct |
52 |
Execution timed out |
5091 ms |
246948 KB |
Time limit exceeded |
53 |
Halted |
0 ms |
0 KB |
- |