답안 #482247

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
482247 2021-10-23T21:29:03 Z nonsensenonsense1 새 집 (APIO18_new_home) C++17
57 / 100
5000 ms 17648 KB
#include <cstdio>
#include <utility>
#include <algorithm>
#include <cstring>
#include <vector>

const int INF = 0x3f3f3f3f;

struct store {
	int x, t, l, r;
	bool operator<(store arg) {
		return x < arg.x;
	}
};

struct query {
	int l, y, ind;
	bool operator<(query arg) {
		return y < arg.y;
	}
};

bool cmp_l(query a, query b) 
{
	return a.l < b.l;
}

const int N = 300000;
const int K = 500;
int n, k, q, next[N + 1], type_amt[N], ans[N], it[N], fi[N], last[N], right[N], to[N];
bool ut[N], active[N];
store a[N + 1];
query qr[N];

int main() 
{
	scanf("%d%d%d", &n, &k, &q);
	a[n].x = INF;
	next[n] = n;
	memset(to, 0x3f, k << 2);
	for (int i = 0; i < n; ++i) {
		scanf("%d%d%d%d", &a[i].x, &a[i].t, &a[i].l, &a[i].r);
		--a[i].t;
		++a[i].r;
	}
	std::sort(a, a + n);
	for (int i = 0; i < q; ++i) {
		scanf("%d%d", &qr[i].l, &qr[i].y);
		qr[i].ind = i;
	}
	std::sort(qr, qr + q);
	for (int i = 0; i < q;) {
		memset(ut, 0, k);
		int until = std::min(i + K, q);
		std::vector<int> inter, inter_type;
		for (int j = 0; j < n; ++j) if (a[j].l >= qr[i].y + 1 && a[j].l <= qr[until - 1].y || a[j].r >= qr[i].y + 1 && a[j].r <= qr[until - 1].y) {
			if (!ut[a[j].t]) {
				inter_type.push_back(a[j].t);
				fi[a[j].t] = n;
			}
			ut[a[j].t] = 1;
			inter.push_back(j);
		}
		memset(last, -1, n << 2);
		for (int j = 0; j < n; ++j) {
			if (a[j].l <= qr[i].y && a[j].r > qr[until - 1].y) {
				if (ut[a[j].t]) {
					active[j] = false;
					if (last[a[j].t] == -1) fi[a[j].t] = j;
					else next[last[a[j].t]] = j;
					last[a[j].t] = j;
					next[j] = n;
				}
				else active[j] = true;
			}
			else active[j] = false;
		}
		for (int j = 0, l = 0, amt = 0; j < n; ++j) {
			while (l == j || l <= n && amt < k - inter_type.size()) {
				if (l < n && active[l]) {
					if (!type_amt[a[l].t]) ++amt;
					++type_amt[a[l].t];
				}
				++l;
			}
			right[j] = l;
			if (active[j]) {
				--type_amt[a[j].t];
				if (!type_amt[a[j].t]) --amt;
			}
		}
		std::sort(qr + i, qr + until, cmp_l);
		for (int j = 0; i < until; ++i) {
			while (qr[i].l - a[j].x > a[right[j] - 1].x - qr[i].l) ++j;
			int res = std::min(j ? qr[i].l - a[j - 1].x : INF, a[right[j] - 1].x - qr[i].l);
			for (int k = 0; k < (int)inter.size(); ++k) if (a[inter[k]].l <= qr[i].y && a[inter[k]].r > qr[i].y) to[a[inter[k]].t] = std::min(to[a[inter[k]].t], abs(qr[i].l - a[inter[k]].x));
			for (int k = 0; k < (int)inter_type.size(); ++k) {
				int cur = inter_type[k], &pos = fi[cur];
				while (a[next[pos]].x <= qr[i].l) pos = next[pos];
				res = std::max(res, std::min(to[cur], std::min(abs(qr[i].l - a[pos].x), a[next[pos]].x - qr[i].l)));
				to[cur] = INF;
			}
			ans[qr[i].ind] = res > INF / 2 ? -1 : res;
		}
	}
	for (int i = 0; i < q; ++i) printf("%d\n", ans[i]);
	return 0;
}

Compilation message

new_home.cpp: In function 'int main()':
new_home.cpp:56:57: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   56 |   for (int j = 0; j < n; ++j) if (a[j].l >= qr[i].y + 1 && a[j].l <= qr[until - 1].y || a[j].r >= qr[i].y + 1 && a[j].r <= qr[until - 1].y) {
      |                                   ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
new_home.cpp:79:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |    while (l == j || l <= n && amt < k - inter_type.size()) {
      |                               ~~~~^~~~~~~~~~~~~~~~~~~~~~~
new_home.cpp:79:28: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   79 |    while (l == j || l <= n && amt < k - inter_type.size()) {
      |                     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
new_home.cpp:37:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |  scanf("%d%d%d", &n, &k, &q);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~~
new_home.cpp:42:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |   scanf("%d%d%d%d", &a[i].x, &a[i].t, &a[i].l, &a[i].r);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
new_home.cpp:48:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |   scanf("%d%d", &qr[i].l, &qr[i].y);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 0 ms 332 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 2 ms 364 KB Output is correct
7 Correct 2 ms 332 KB Output is correct
8 Correct 2 ms 332 KB Output is correct
9 Correct 2 ms 332 KB Output is correct
10 Correct 2 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 332 KB Output is correct
14 Correct 1 ms 332 KB Output is correct
15 Correct 2 ms 332 KB Output is correct
16 Correct 2 ms 332 KB Output is correct
17 Correct 1 ms 332 KB Output is correct
18 Correct 2 ms 332 KB Output is correct
19 Correct 3 ms 356 KB Output is correct
20 Correct 2 ms 332 KB Output is correct
21 Correct 1 ms 332 KB Output is correct
22 Correct 3 ms 332 KB Output is correct
23 Correct 2 ms 356 KB Output is correct
24 Correct 2 ms 332 KB Output is correct
25 Correct 1 ms 332 KB Output is correct
26 Correct 1 ms 332 KB Output is correct
27 Correct 2 ms 332 KB Output is correct
28 Correct 1 ms 332 KB Output is correct
29 Correct 1 ms 332 KB Output is correct
30 Correct 1 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 0 ms 332 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 2 ms 364 KB Output is correct
7 Correct 2 ms 332 KB Output is correct
8 Correct 2 ms 332 KB Output is correct
9 Correct 2 ms 332 KB Output is correct
10 Correct 2 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 332 KB Output is correct
14 Correct 1 ms 332 KB Output is correct
15 Correct 2 ms 332 KB Output is correct
16 Correct 2 ms 332 KB Output is correct
17 Correct 1 ms 332 KB Output is correct
18 Correct 2 ms 332 KB Output is correct
19 Correct 3 ms 356 KB Output is correct
20 Correct 2 ms 332 KB Output is correct
21 Correct 1 ms 332 KB Output is correct
22 Correct 3 ms 332 KB Output is correct
23 Correct 2 ms 356 KB Output is correct
24 Correct 2 ms 332 KB Output is correct
25 Correct 1 ms 332 KB Output is correct
26 Correct 1 ms 332 KB Output is correct
27 Correct 2 ms 332 KB Output is correct
28 Correct 1 ms 332 KB Output is correct
29 Correct 1 ms 332 KB Output is correct
30 Correct 1 ms 332 KB Output is correct
31 Correct 772 ms 3364 KB Output is correct
32 Correct 532 ms 3080 KB Output is correct
33 Correct 733 ms 3248 KB Output is correct
34 Correct 832 ms 3480 KB Output is correct
35 Correct 693 ms 3396 KB Output is correct
36 Correct 600 ms 3348 KB Output is correct
37 Correct 570 ms 3360 KB Output is correct
38 Correct 567 ms 3344 KB Output is correct
39 Correct 325 ms 3280 KB Output is correct
40 Correct 369 ms 3196 KB Output is correct
41 Correct 687 ms 3468 KB Output is correct
42 Correct 726 ms 3236 KB Output is correct
43 Correct 121 ms 3188 KB Output is correct
44 Correct 632 ms 3480 KB Output is correct
45 Correct 390 ms 3264 KB Output is correct
46 Correct 272 ms 3244 KB Output is correct
47 Correct 161 ms 2820 KB Output is correct
48 Correct 140 ms 2884 KB Output is correct
49 Correct 195 ms 3012 KB Output is correct
50 Correct 466 ms 3304 KB Output is correct
51 Correct 207 ms 2992 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2409 ms 15532 KB Output is correct
2 Correct 2676 ms 13728 KB Output is correct
3 Correct 2669 ms 17636 KB Output is correct
4 Correct 2440 ms 16036 KB Output is correct
5 Correct 2462 ms 13344 KB Output is correct
6 Correct 3005 ms 13732 KB Output is correct
7 Correct 2606 ms 17648 KB Output is correct
8 Correct 2384 ms 15888 KB Output is correct
9 Correct 2294 ms 15280 KB Output is correct
10 Correct 2394 ms 14368 KB Output is correct
11 Correct 2353 ms 13944 KB Output is correct
12 Correct 2200 ms 14488 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5025 ms 13564 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 0 ms 332 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 2 ms 364 KB Output is correct
7 Correct 2 ms 332 KB Output is correct
8 Correct 2 ms 332 KB Output is correct
9 Correct 2 ms 332 KB Output is correct
10 Correct 2 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 332 KB Output is correct
14 Correct 1 ms 332 KB Output is correct
15 Correct 2 ms 332 KB Output is correct
16 Correct 2 ms 332 KB Output is correct
17 Correct 1 ms 332 KB Output is correct
18 Correct 2 ms 332 KB Output is correct
19 Correct 3 ms 356 KB Output is correct
20 Correct 2 ms 332 KB Output is correct
21 Correct 1 ms 332 KB Output is correct
22 Correct 3 ms 332 KB Output is correct
23 Correct 2 ms 356 KB Output is correct
24 Correct 2 ms 332 KB Output is correct
25 Correct 1 ms 332 KB Output is correct
26 Correct 1 ms 332 KB Output is correct
27 Correct 2 ms 332 KB Output is correct
28 Correct 1 ms 332 KB Output is correct
29 Correct 1 ms 332 KB Output is correct
30 Correct 1 ms 332 KB Output is correct
31 Correct 772 ms 3364 KB Output is correct
32 Correct 532 ms 3080 KB Output is correct
33 Correct 733 ms 3248 KB Output is correct
34 Correct 832 ms 3480 KB Output is correct
35 Correct 693 ms 3396 KB Output is correct
36 Correct 600 ms 3348 KB Output is correct
37 Correct 570 ms 3360 KB Output is correct
38 Correct 567 ms 3344 KB Output is correct
39 Correct 325 ms 3280 KB Output is correct
40 Correct 369 ms 3196 KB Output is correct
41 Correct 687 ms 3468 KB Output is correct
42 Correct 726 ms 3236 KB Output is correct
43 Correct 121 ms 3188 KB Output is correct
44 Correct 632 ms 3480 KB Output is correct
45 Correct 390 ms 3264 KB Output is correct
46 Correct 272 ms 3244 KB Output is correct
47 Correct 161 ms 2820 KB Output is correct
48 Correct 140 ms 2884 KB Output is correct
49 Correct 195 ms 3012 KB Output is correct
50 Correct 466 ms 3304 KB Output is correct
51 Correct 207 ms 2992 KB Output is correct
52 Correct 904 ms 3632 KB Output is correct
53 Correct 1030 ms 3760 KB Output is correct
54 Correct 992 ms 3368 KB Output is correct
55 Correct 761 ms 3856 KB Output is correct
56 Correct 751 ms 3996 KB Output is correct
57 Correct 726 ms 3616 KB Output is correct
58 Correct 840 ms 3628 KB Output is correct
59 Correct 866 ms 3612 KB Output is correct
60 Correct 785 ms 3436 KB Output is correct
61 Correct 113 ms 3724 KB Output is correct
62 Correct 914 ms 3760 KB Output is correct
63 Correct 1004 ms 3660 KB Output is correct
64 Correct 1061 ms 3488 KB Output is correct
65 Correct 1064 ms 3416 KB Output is correct
66 Correct 827 ms 3492 KB Output is correct
67 Correct 1004 ms 3216 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 0 ms 332 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 2 ms 364 KB Output is correct
7 Correct 2 ms 332 KB Output is correct
8 Correct 2 ms 332 KB Output is correct
9 Correct 2 ms 332 KB Output is correct
10 Correct 2 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 332 KB Output is correct
14 Correct 1 ms 332 KB Output is correct
15 Correct 2 ms 332 KB Output is correct
16 Correct 2 ms 332 KB Output is correct
17 Correct 1 ms 332 KB Output is correct
18 Correct 2 ms 332 KB Output is correct
19 Correct 3 ms 356 KB Output is correct
20 Correct 2 ms 332 KB Output is correct
21 Correct 1 ms 332 KB Output is correct
22 Correct 3 ms 332 KB Output is correct
23 Correct 2 ms 356 KB Output is correct
24 Correct 2 ms 332 KB Output is correct
25 Correct 1 ms 332 KB Output is correct
26 Correct 1 ms 332 KB Output is correct
27 Correct 2 ms 332 KB Output is correct
28 Correct 1 ms 332 KB Output is correct
29 Correct 1 ms 332 KB Output is correct
30 Correct 1 ms 332 KB Output is correct
31 Correct 772 ms 3364 KB Output is correct
32 Correct 532 ms 3080 KB Output is correct
33 Correct 733 ms 3248 KB Output is correct
34 Correct 832 ms 3480 KB Output is correct
35 Correct 693 ms 3396 KB Output is correct
36 Correct 600 ms 3348 KB Output is correct
37 Correct 570 ms 3360 KB Output is correct
38 Correct 567 ms 3344 KB Output is correct
39 Correct 325 ms 3280 KB Output is correct
40 Correct 369 ms 3196 KB Output is correct
41 Correct 687 ms 3468 KB Output is correct
42 Correct 726 ms 3236 KB Output is correct
43 Correct 121 ms 3188 KB Output is correct
44 Correct 632 ms 3480 KB Output is correct
45 Correct 390 ms 3264 KB Output is correct
46 Correct 272 ms 3244 KB Output is correct
47 Correct 161 ms 2820 KB Output is correct
48 Correct 140 ms 2884 KB Output is correct
49 Correct 195 ms 3012 KB Output is correct
50 Correct 466 ms 3304 KB Output is correct
51 Correct 207 ms 2992 KB Output is correct
52 Correct 2409 ms 15532 KB Output is correct
53 Correct 2676 ms 13728 KB Output is correct
54 Correct 2669 ms 17636 KB Output is correct
55 Correct 2440 ms 16036 KB Output is correct
56 Correct 2462 ms 13344 KB Output is correct
57 Correct 3005 ms 13732 KB Output is correct
58 Correct 2606 ms 17648 KB Output is correct
59 Correct 2384 ms 15888 KB Output is correct
60 Correct 2294 ms 15280 KB Output is correct
61 Correct 2394 ms 14368 KB Output is correct
62 Correct 2353 ms 13944 KB Output is correct
63 Correct 2200 ms 14488 KB Output is correct
64 Execution timed out 5025 ms 13564 KB Time limit exceeded
65 Halted 0 ms 0 KB -