#include "fish.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MXN = 2e5 + 5;
long long mx[MXN];
vector<long long> lft[MXN], rig[MXN], in[MXN];
vector<long long> pre[2][MXN], suf[2][MXN];
vector<long long> dp[2][MXN];
vector<long long> ind[MXN];
vector<array<long long, 2>> val[MXN];
/*
0 = len[i] < len[i + 1];
1 = len[i] > len[i + 1];
*/
int A[9] = {0, 0, 0, -1, -1, -1, 1, 1, 1};
int B[9] = {0, -1, 1, 0, -1, 1, 0, -1, 1};
long long max_weights(int32_t N, int32_t M, vector<int32_t> X, vector<int32_t> Y, vector<int32_t> W)
{
for (int i = 0; i < M; i++)
{
X[i]++, Y[i]++;
for (int j = 0; j < 9; j++)
{
int x = X[i] + A[j], y = Y[i] + B[j];
if (min(x, y) >= 1 && max(x, y) <= N)
{
ind[x].push_back(y);
}
}
val[X[i]].push_back({Y[i], W[i]});
}
for (int i = 1; i <= N; i++)
{
sort(ind[i].begin(), ind[i].end());
ind[i].resize(unique(ind[i].begin(), ind[i].end()) - ind[i].begin());
sort(val[i].begin(), val[i].end());
}
for (int i = 1; i <= N; i++)
{
int k1 = 0, k2 = 0, k3 = 0;
for (int j = 0; j < ind[i].size(); j++)
{
lft[i].push_back((lft[i].empty() ? 0LL : lft[i].back()));
rig[i].push_back((rig[i].empty() ? 0LL : rig[i].back()));
in[i].push_back((in[i].empty() ? 0LL : in[i].back()));
while (k1 < val[i - 1].size() && val[i - 1][k1][0] <= ind[i][j]) lft[i][j] += val[i - 1][k1][1], k1++;
while (k2 < val[i + 1].size() && val[i + 1][k2][0] <= ind[i][j]) rig[i][j] += val[i + 1][k2][1], k2++;
while (k3 < val[i].size() && val[i][k3][0] <= ind[i][j]) in[i][j] += val[i][k3][1], k3++;
}
}
for (int i = 1; i <= N; i++)
{
int k1 = 0, k2 = 0, k3 = 0, k4 = 0;
for (int j = 0; j < ind[i].size(); j++)
{
dp[0][i].push_back(lft[i][j] + rig[i][j]);
dp[1][i].push_back(lft[i][j] + rig[i][j]);
if (i <= 1) continue;
while (k1 < ind[i - 1].size() && ind[i - 1][k1] <= ind[i][j]) k1++;
while (k2 < ind[i - 1].size() && ind[i - 1][k2] < ind[i][j]) k2++;
dp[0][i][j] = max(dp[0][i][j], (k1 - 1 >= 0 ? pre[0][i - 1][k1 - 1] : 0) + (lft[i][j] + rig[i][j]));
dp[1][i][j] = max(dp[1][i][j], (k2 < ind[i - 1].size() ? suf[0][i - 1][k2] : 0) + (rig[i][j] - in[i][j]));
if (i <= 2) continue;
while (k3 < ind[i - 2].size() && ind[i - 2][k3] <= ind[i][j]) k3++;
while (k4 < ind[i - 2].size() && ind[i - 2][k4] < ind[i][j]) k4++;
long long A = (k3 - 1 >= 0 ? pre[1][i - 2][k3 - 1] : 0) + lft[i][j] + rig[i][j];
long long B = (k4 < ind[i - 2].size() ? suf[1][i - 2][k4] : 0) + rig[i][j];
dp[0][i][j] = max({dp[0][i][j], A, B});
dp[1][i][j] = max({dp[1][i][j], A, B});
if (i <= 3) continue;
dp[0][i][j] = max(dp[0][i][j], mx[i - 3] + lft[i][j] + rig[i][j]);
dp[1][i][j] = max(dp[1][i][j], mx[i - 3] + lft[i][j] + rig[i][j]);
}
for (int j = 0; j < ind[i].size(); j++)
{
dp[1][i][j] = max(dp[1][i][j], dp[0][i][j]);
mx[i] = max({mx[i], dp[0][i][j], dp[1][i][j]});
}
for (int j = 0; j < ind[i].size(); j++)
{
pre[0][i].push_back(max((pre[0][i].empty() ? 0LL : pre[0][i].back()), dp[0][i][j] - rig[i][j] - in[i][j]));
pre[1][i].push_back(max((pre[1][i].empty() ? 0LL : pre[1][i].back()), max(dp[0][i][j], dp[1][i][j]) - rig[i][j]));
}
suf[0][i].assign(ind[i].size(), 0);
suf[1][i].assign(ind[i].size(), 0);
for (int j = (int)ind[i].size() - 1; j >= 0; j--)
{
if (j + 1 < ind[i].size()) suf[0][i][j] = suf[0][i][j + 1], suf[1][i][j] = suf[1][i][j + 1];
suf[0][i][j] = max(suf[0][i][j], dp[1][i][j]);
suf[1][i][j] = max(suf[1][i][j], max(dp[0][i][j], dp[1][i][j]));
}
}
long long ans = 0;
for (int i = 1; i <= N; i++)
{
for (long long &j : dp[0][i]) ans = max(ans, j);
for (long long &j : dp[1][i]) ans = max(ans, j);
}
return ans;
}
Compilation message
fish.cpp: In function 'long long int max_weights(int32_t, int32_t, std::vector<int>, std::vector<int>, std::vector<int>)':
fish.cpp:49:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
49 | for (int j = 0; j < ind[i].size(); j++)
| ~~^~~~~~~~~~~~~~~
fish.cpp:54:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
54 | while (k1 < val[i - 1].size() && val[i - 1][k1][0] <= ind[i][j]) lft[i][j] += val[i - 1][k1][1], k1++;
| ~~~^~~~~~~~~~~~~~~~~~~
fish.cpp:55:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
55 | while (k2 < val[i + 1].size() && val[i + 1][k2][0] <= ind[i][j]) rig[i][j] += val[i + 1][k2][1], k2++;
| ~~~^~~~~~~~~~~~~~~~~~~
fish.cpp:56:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
56 | while (k3 < val[i].size() && val[i][k3][0] <= ind[i][j]) in[i][j] += val[i][k3][1], k3++;
| ~~~^~~~~~~~~~~~~~~
fish.cpp:63:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
63 | for (int j = 0; j < ind[i].size(); j++)
| ~~^~~~~~~~~~~~~~~
fish.cpp:68:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
68 | while (k1 < ind[i - 1].size() && ind[i - 1][k1] <= ind[i][j]) k1++;
| ~~~^~~~~~~~~~~~~~~~~~~
fish.cpp:69:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
69 | while (k2 < ind[i - 1].size() && ind[i - 1][k2] < ind[i][j]) k2++;
| ~~~^~~~~~~~~~~~~~~~~~~
fish.cpp:71:48: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
71 | dp[1][i][j] = max(dp[1][i][j], (k2 < ind[i - 1].size() ? suf[0][i - 1][k2] : 0) + (rig[i][j] - in[i][j]));
| ~~~^~~~~~~~~~~~~~~~~~~
fish.cpp:73:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
73 | while (k3 < ind[i - 2].size() && ind[i - 2][k3] <= ind[i][j]) k3++;
| ~~~^~~~~~~~~~~~~~~~~~~
fish.cpp:74:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
74 | while (k4 < ind[i - 2].size() && ind[i - 2][k4] < ind[i][j]) k4++;
| ~~~^~~~~~~~~~~~~~~~~~~
fish.cpp:76:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
76 | long long B = (k4 < ind[i - 2].size() ? suf[1][i - 2][k4] : 0) + rig[i][j];
| ~~~^~~~~~~~~~~~~~~~~~~
fish.cpp:83:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
83 | for (int j = 0; j < ind[i].size(); j++)
| ~~^~~~~~~~~~~~~~~
fish.cpp:88:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
88 | for (int j = 0; j < ind[i].size(); j++)
| ~~^~~~~~~~~~~~~~~
fish.cpp:97:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
97 | if (j + 1 < ind[i].size()) suf[0][i][j] = suf[0][i][j + 1], suf[1][i][j] = suf[1][i][j + 1];
| ~~~~~~^~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
57 ms |
73648 KB |
Output is correct |
2 |
Correct |
70 ms |
76448 KB |
Output is correct |
3 |
Correct |
9 ms |
51868 KB |
Output is correct |
4 |
Correct |
8 ms |
52060 KB |
Output is correct |
5 |
Incorrect |
266 ms |
160468 KB |
1st lines differ - on the 1st token, expected: '149814460735479', found: '44945481875572' |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
52060 KB |
Output is correct |
2 |
Correct |
117 ms |
90288 KB |
Output is correct |
3 |
Correct |
141 ms |
97692 KB |
Output is correct |
4 |
Correct |
59 ms |
73640 KB |
Output is correct |
5 |
Correct |
69 ms |
76436 KB |
Output is correct |
6 |
Correct |
7 ms |
52060 KB |
Output is correct |
7 |
Correct |
7 ms |
51900 KB |
Output is correct |
8 |
Correct |
8 ms |
52060 KB |
Output is correct |
9 |
Correct |
7 ms |
52060 KB |
Output is correct |
10 |
Correct |
8 ms |
51908 KB |
Output is correct |
11 |
Correct |
7 ms |
52060 KB |
Output is correct |
12 |
Correct |
75 ms |
82080 KB |
Output is correct |
13 |
Correct |
89 ms |
87172 KB |
Output is correct |
14 |
Correct |
71 ms |
77868 KB |
Output is correct |
15 |
Correct |
80 ms |
75244 KB |
Output is correct |
16 |
Correct |
67 ms |
78388 KB |
Output is correct |
17 |
Correct |
73 ms |
80756 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
52060 KB |
Output is correct |
2 |
Correct |
8 ms |
51904 KB |
Output is correct |
3 |
Incorrect |
57 ms |
76628 KB |
1st lines differ - on the 1st token, expected: '21261825233649', found: '369591758422' |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
52060 KB |
Output is correct |
2 |
Correct |
7 ms |
52112 KB |
Output is correct |
3 |
Correct |
8 ms |
52060 KB |
Output is correct |
4 |
Correct |
8 ms |
52056 KB |
Output is correct |
5 |
Correct |
8 ms |
52056 KB |
Output is correct |
6 |
Correct |
8 ms |
52060 KB |
Output is correct |
7 |
Correct |
7 ms |
52108 KB |
Output is correct |
8 |
Correct |
7 ms |
52060 KB |
Output is correct |
9 |
Correct |
7 ms |
52176 KB |
Output is correct |
10 |
Correct |
9 ms |
52828 KB |
Output is correct |
11 |
Correct |
7 ms |
52316 KB |
Output is correct |
12 |
Correct |
7 ms |
52572 KB |
Output is correct |
13 |
Correct |
7 ms |
52060 KB |
Output is correct |
14 |
Correct |
8 ms |
52316 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
52060 KB |
Output is correct |
2 |
Correct |
7 ms |
52112 KB |
Output is correct |
3 |
Correct |
8 ms |
52060 KB |
Output is correct |
4 |
Correct |
8 ms |
52056 KB |
Output is correct |
5 |
Correct |
8 ms |
52056 KB |
Output is correct |
6 |
Correct |
8 ms |
52060 KB |
Output is correct |
7 |
Correct |
7 ms |
52108 KB |
Output is correct |
8 |
Correct |
7 ms |
52060 KB |
Output is correct |
9 |
Correct |
7 ms |
52176 KB |
Output is correct |
10 |
Correct |
9 ms |
52828 KB |
Output is correct |
11 |
Correct |
7 ms |
52316 KB |
Output is correct |
12 |
Correct |
7 ms |
52572 KB |
Output is correct |
13 |
Correct |
7 ms |
52060 KB |
Output is correct |
14 |
Correct |
8 ms |
52316 KB |
Output is correct |
15 |
Correct |
8 ms |
52316 KB |
Output is correct |
16 |
Incorrect |
8 ms |
52828 KB |
1st lines differ - on the 1st token, expected: '741526820812', found: '314050587306' |
17 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
52060 KB |
Output is correct |
2 |
Correct |
7 ms |
52112 KB |
Output is correct |
3 |
Correct |
8 ms |
52060 KB |
Output is correct |
4 |
Correct |
8 ms |
52056 KB |
Output is correct |
5 |
Correct |
8 ms |
52056 KB |
Output is correct |
6 |
Correct |
8 ms |
52060 KB |
Output is correct |
7 |
Correct |
7 ms |
52108 KB |
Output is correct |
8 |
Correct |
7 ms |
52060 KB |
Output is correct |
9 |
Correct |
7 ms |
52176 KB |
Output is correct |
10 |
Correct |
9 ms |
52828 KB |
Output is correct |
11 |
Correct |
7 ms |
52316 KB |
Output is correct |
12 |
Correct |
7 ms |
52572 KB |
Output is correct |
13 |
Correct |
7 ms |
52060 KB |
Output is correct |
14 |
Correct |
8 ms |
52316 KB |
Output is correct |
15 |
Correct |
8 ms |
52316 KB |
Output is correct |
16 |
Incorrect |
8 ms |
52828 KB |
1st lines differ - on the 1st token, expected: '741526820812', found: '314050587306' |
17 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
52060 KB |
Output is correct |
2 |
Correct |
8 ms |
51904 KB |
Output is correct |
3 |
Incorrect |
57 ms |
76628 KB |
1st lines differ - on the 1st token, expected: '21261825233649', found: '369591758422' |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
57 ms |
73648 KB |
Output is correct |
2 |
Correct |
70 ms |
76448 KB |
Output is correct |
3 |
Correct |
9 ms |
51868 KB |
Output is correct |
4 |
Correct |
8 ms |
52060 KB |
Output is correct |
5 |
Incorrect |
266 ms |
160468 KB |
1st lines differ - on the 1st token, expected: '149814460735479', found: '44945481875572' |
6 |
Halted |
0 ms |
0 KB |
- |