#include <bits/stdc++.h>
using namespace std;
constexpr int maxn = 50010, inf = 0x3f3f3f3f;
int A[maxn], B[maxn], R, C;
int find_first_A(int id, int val) { int i; for(i = id+1; A[i] < val; i++); return i; }
int find_first_B(int id, int val) { int i; for(i = id+1; B[i] < val; i++); return i; }
int find_last_A(int id, int val) { int i; for(i = id-1; A[i] < val; i--); return i; }
int find_last_B(int id, int val) { int i; for(i = id-1; B[i] < val; i--); return i; }
int find_first(int lim_id, int lim_val, bool k) { return k == 0 ? find_first_A(lim_id, lim_val) : find_first_B(lim_id, lim_val); }
int find_last(int lim_id, int lim_val, bool k) { return k == 0 ? find_last_A(lim_id, lim_val) : find_last_B(lim_id, lim_val); }
map<int, long long> dp[maxn][2];
long long go(int r, int c, bool k) {
if(dp[r][k].count(c))
return dp[r][k][c];
int procurar = k == 0 ? r : c, eu = k == 0 ? c : r;
int p1 = find_last(procurar, k == 0 ? B[eu] : A[eu], k), d1 = procurar - p1, v1 = k == 0 ? A[p1] : B[p1]; // ultimo cara vertical com indice menor que c e valor maior que A[r]
int p2 = find_first(procurar, k == 0 ? B[eu] : A[eu], k), d2 = p2 - procurar, v2 = k == 0 ? A[p2] : B[p2]; // primeiro cara vertical com indice maior que c e valor maior que A[r]
if(v1 > v2) // quero manter a invariante de que v1 < v2 pra ficar mais fácil de calcular as coisas
swap(p1, p2), swap(d1, d2), swap(v1, v2);
// subtraio 1 dos infinitos porque eu defini eles como o primeiro ponto fora do grid (0 ou R+1/C+1), então a distância deles fica 1 a mais doq pode
if(v1 == inf)
return dp[r][k][c] = max(d1, d2)-1; // cheguei ao fim indo pra algum dos lados, escolho o maior obviamente
if(v2 == inf)
return dp[r][k][c] = max(d1 + (k == 0 ? go(p1, c, 1) : go(r, p1, 0)), (long long) d2-1); // cheguei ao fim indo pro maior mas não cheguei indo pro menor, então pego o melhor entre os dois
// brutao pq meu guloso ta dando errado
return dp[r][k][c] = max((long long) d1 + (k == 0 ? go(p1, c, !k) : go(r, p1, !k)), (long long) d2 + (k == 0 ? go(p2, c, !k) : go(r, p2, !k)));
}
int main() {
int q; scanf("%d %d %d", &R, &C, &q);
for(int i = 1; i <= R; i++)
scanf("%d", &A[i]);
for(int i = 1; i <= C; i++)
scanf("%d", &B[i]);
A[0] = A[R+1] = B[0] = B[C+1] = inf;
while(q--) {
int r, c; scanf("%d %d", &r, &c);
printf("%lld\n", max(go(r, c, 0), go(r, c, 1)));
}
}
Compilation message
abduction2.cpp: In function 'int main()':
abduction2.cpp:41:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
41 | int q; scanf("%d %d %d", &R, &C, &q);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
abduction2.cpp:43:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
43 | scanf("%d", &A[i]);
| ~~~~~^~~~~~~~~~~~~
abduction2.cpp:45:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
45 | scanf("%d", &B[i]);
| ~~~~~^~~~~~~~~~~~~
abduction2.cpp:48:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
48 | int r, c; scanf("%d %d", &r, &c);
| ~~~~~^~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
4948 KB |
Output is correct |
2 |
Correct |
2 ms |
4948 KB |
Output is correct |
3 |
Correct |
3 ms |
4948 KB |
Output is correct |
4 |
Correct |
2 ms |
4948 KB |
Output is correct |
5 |
Correct |
3 ms |
4948 KB |
Output is correct |
6 |
Correct |
2 ms |
4948 KB |
Output is correct |
7 |
Correct |
2 ms |
4948 KB |
Output is correct |
8 |
Correct |
2 ms |
4948 KB |
Output is correct |
9 |
Correct |
2 ms |
4948 KB |
Output is correct |
10 |
Correct |
3 ms |
4948 KB |
Output is correct |
11 |
Correct |
2 ms |
4948 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
4948 KB |
Output is correct |
2 |
Correct |
2 ms |
4948 KB |
Output is correct |
3 |
Correct |
3 ms |
4948 KB |
Output is correct |
4 |
Correct |
2 ms |
4948 KB |
Output is correct |
5 |
Correct |
3 ms |
4948 KB |
Output is correct |
6 |
Correct |
2 ms |
4948 KB |
Output is correct |
7 |
Correct |
2 ms |
4948 KB |
Output is correct |
8 |
Correct |
2 ms |
4948 KB |
Output is correct |
9 |
Correct |
2 ms |
4948 KB |
Output is correct |
10 |
Correct |
3 ms |
4948 KB |
Output is correct |
11 |
Correct |
2 ms |
4948 KB |
Output is correct |
12 |
Correct |
3 ms |
4948 KB |
Output is correct |
13 |
Correct |
3 ms |
4960 KB |
Output is correct |
14 |
Correct |
3 ms |
4948 KB |
Output is correct |
15 |
Correct |
3 ms |
4948 KB |
Output is correct |
16 |
Correct |
3 ms |
4948 KB |
Output is correct |
17 |
Correct |
3 ms |
4948 KB |
Output is correct |
18 |
Correct |
4 ms |
4948 KB |
Output is correct |
19 |
Correct |
5 ms |
5204 KB |
Output is correct |
20 |
Correct |
5 ms |
5212 KB |
Output is correct |
21 |
Correct |
5 ms |
5228 KB |
Output is correct |
22 |
Correct |
6 ms |
5468 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
4948 KB |
Output is correct |
2 |
Correct |
2 ms |
4948 KB |
Output is correct |
3 |
Correct |
3 ms |
4948 KB |
Output is correct |
4 |
Correct |
2 ms |
4948 KB |
Output is correct |
5 |
Correct |
3 ms |
4948 KB |
Output is correct |
6 |
Correct |
2 ms |
4948 KB |
Output is correct |
7 |
Correct |
2 ms |
4948 KB |
Output is correct |
8 |
Correct |
2 ms |
4948 KB |
Output is correct |
9 |
Correct |
2 ms |
4948 KB |
Output is correct |
10 |
Correct |
3 ms |
4948 KB |
Output is correct |
11 |
Correct |
2 ms |
4948 KB |
Output is correct |
12 |
Correct |
3 ms |
4948 KB |
Output is correct |
13 |
Correct |
3 ms |
4960 KB |
Output is correct |
14 |
Correct |
3 ms |
4948 KB |
Output is correct |
15 |
Correct |
3 ms |
4948 KB |
Output is correct |
16 |
Correct |
3 ms |
4948 KB |
Output is correct |
17 |
Correct |
3 ms |
4948 KB |
Output is correct |
18 |
Correct |
4 ms |
4948 KB |
Output is correct |
19 |
Correct |
5 ms |
5204 KB |
Output is correct |
20 |
Correct |
5 ms |
5212 KB |
Output is correct |
21 |
Correct |
5 ms |
5228 KB |
Output is correct |
22 |
Correct |
6 ms |
5468 KB |
Output is correct |
23 |
Correct |
13 ms |
5588 KB |
Output is correct |
24 |
Correct |
14 ms |
5580 KB |
Output is correct |
25 |
Correct |
14 ms |
5588 KB |
Output is correct |
26 |
Correct |
13 ms |
5528 KB |
Output is correct |
27 |
Correct |
13 ms |
5588 KB |
Output is correct |
28 |
Correct |
397 ms |
10644 KB |
Output is correct |
29 |
Correct |
86 ms |
6240 KB |
Output is correct |
30 |
Correct |
977 ms |
11544 KB |
Output is correct |
31 |
Correct |
1130 ms |
13284 KB |
Output is correct |
32 |
Correct |
86 ms |
5932 KB |
Output is correct |
33 |
Correct |
377 ms |
7312 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
5204 KB |
Output is correct |
2 |
Correct |
3 ms |
5076 KB |
Output is correct |
3 |
Correct |
4 ms |
5076 KB |
Output is correct |
4 |
Correct |
4 ms |
5076 KB |
Output is correct |
5 |
Correct |
4 ms |
5188 KB |
Output is correct |
6 |
Correct |
4 ms |
5180 KB |
Output is correct |
7 |
Correct |
4 ms |
5244 KB |
Output is correct |
8 |
Correct |
6 ms |
5460 KB |
Output is correct |
9 |
Correct |
6 ms |
5460 KB |
Output is correct |
10 |
Correct |
6 ms |
5332 KB |
Output is correct |
11 |
Correct |
7 ms |
5460 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
4948 KB |
Output is correct |
2 |
Correct |
2 ms |
4948 KB |
Output is correct |
3 |
Correct |
3 ms |
4948 KB |
Output is correct |
4 |
Correct |
2 ms |
4948 KB |
Output is correct |
5 |
Correct |
3 ms |
4948 KB |
Output is correct |
6 |
Correct |
2 ms |
4948 KB |
Output is correct |
7 |
Correct |
2 ms |
4948 KB |
Output is correct |
8 |
Correct |
2 ms |
4948 KB |
Output is correct |
9 |
Correct |
2 ms |
4948 KB |
Output is correct |
10 |
Correct |
3 ms |
4948 KB |
Output is correct |
11 |
Correct |
2 ms |
4948 KB |
Output is correct |
12 |
Correct |
3 ms |
4948 KB |
Output is correct |
13 |
Correct |
3 ms |
4960 KB |
Output is correct |
14 |
Correct |
3 ms |
4948 KB |
Output is correct |
15 |
Correct |
3 ms |
4948 KB |
Output is correct |
16 |
Correct |
3 ms |
4948 KB |
Output is correct |
17 |
Correct |
3 ms |
4948 KB |
Output is correct |
18 |
Correct |
4 ms |
4948 KB |
Output is correct |
19 |
Correct |
5 ms |
5204 KB |
Output is correct |
20 |
Correct |
5 ms |
5212 KB |
Output is correct |
21 |
Correct |
5 ms |
5228 KB |
Output is correct |
22 |
Correct |
6 ms |
5468 KB |
Output is correct |
23 |
Correct |
13 ms |
5588 KB |
Output is correct |
24 |
Correct |
14 ms |
5580 KB |
Output is correct |
25 |
Correct |
14 ms |
5588 KB |
Output is correct |
26 |
Correct |
13 ms |
5528 KB |
Output is correct |
27 |
Correct |
13 ms |
5588 KB |
Output is correct |
28 |
Correct |
397 ms |
10644 KB |
Output is correct |
29 |
Correct |
86 ms |
6240 KB |
Output is correct |
30 |
Correct |
977 ms |
11544 KB |
Output is correct |
31 |
Correct |
1130 ms |
13284 KB |
Output is correct |
32 |
Correct |
86 ms |
5932 KB |
Output is correct |
33 |
Correct |
377 ms |
7312 KB |
Output is correct |
34 |
Correct |
4 ms |
5204 KB |
Output is correct |
35 |
Correct |
3 ms |
5076 KB |
Output is correct |
36 |
Correct |
4 ms |
5076 KB |
Output is correct |
37 |
Correct |
4 ms |
5076 KB |
Output is correct |
38 |
Correct |
4 ms |
5188 KB |
Output is correct |
39 |
Correct |
4 ms |
5180 KB |
Output is correct |
40 |
Correct |
4 ms |
5244 KB |
Output is correct |
41 |
Correct |
6 ms |
5460 KB |
Output is correct |
42 |
Correct |
6 ms |
5460 KB |
Output is correct |
43 |
Correct |
6 ms |
5332 KB |
Output is correct |
44 |
Correct |
7 ms |
5460 KB |
Output is correct |
45 |
Correct |
20 ms |
5844 KB |
Output is correct |
46 |
Correct |
20 ms |
5832 KB |
Output is correct |
47 |
Correct |
18 ms |
5868 KB |
Output is correct |
48 |
Correct |
17 ms |
5920 KB |
Output is correct |
49 |
Correct |
20 ms |
5880 KB |
Output is correct |
50 |
Correct |
482 ms |
10156 KB |
Output is correct |
51 |
Correct |
451 ms |
10836 KB |
Output is correct |
52 |
Correct |
1345 ms |
15720 KB |
Output is correct |
53 |
Correct |
1269 ms |
15556 KB |
Output is correct |
54 |
Correct |
1244 ms |
14840 KB |
Output is correct |
55 |
Correct |
1776 ms |
19528 KB |
Output is correct |
56 |
Correct |
2096 ms |
131260 KB |
Output is correct |
57 |
Correct |
730 ms |
38636 KB |
Output is correct |
58 |
Correct |
690 ms |
36808 KB |
Output is correct |
59 |
Correct |
682 ms |
36552 KB |
Output is correct |