#include "fish.h"
#include <bits/stdc++.h>
using namespace std;
template <int D, typename T>
struct Vec : public vector<Vec<D - 1, T>> {
static_assert(D >= 1, "Dimension must be positive");
template <typename... Args>
Vec(int n = 0, Args... args) : vector<Vec<D - 1, T>>(n, Vec<D - 1, T>(args...)) {}
};
template <typename T>
struct Vec<1, T> : public vector<T> {
Vec(int n = 0, T val = T()) : std::vector<T>(n, val) {}
};
long long max_weights(int N, int M, vector <int> X, vector <int> Y, vector <int> W){
vector <vector <pair <int, int>>> fishes(N);
vector <int> siz(N);
for (int i = 0; i < N; ++ i)
fishes[i].emplace_back(N, 0);
for (int i = 0; i < M; ++ i)
fishes[X[i]].emplace_back(Y[i], W[i]);
Vec <2, vector <long long>> dp(N, 2);
for (int i = 0; i < N; ++ i){
sort(fishes[i].begin(), fishes[i].end());
siz[i] = fishes[i].size();
for (int t : {0, 1})
dp[i][t].resize(siz[i], 0);
}
auto maxl = [&](long long &a, long long b) -> void {
a = max(a, b);
};
for (int i = 1; i < N; ++ i){
long long val_up = 0;
int ptr = 0;
for (int j = 0; j < siz[i]; ++ j){
auto [y, w] = fishes[i][j];
if (y == N) y ++;
while (ptr < siz[i - 1] && fishes[i - 1][ptr].first < y){
val_up = max(val_up, dp[i - 1][0][ptr]);
val_up += fishes[i - 1][ptr].second;
ptr ++;
}
dp[i][0][j] = val_up;
}
long long val_down = 0;
ptr = siz[i - 1] - 1;
for (int j = siz[i] - 1; j >= 0; -- j){
auto [y, w] = fishes[i][j];
while (ptr >= 0 && fishes[i - 1][ptr].first > y){
val_down = max(val_down, dp[i - 1][1][ptr]);
ptr --;
}
val_down += w;
dp[i][1][j] = val_down;
}
maxl(dp[i][1][siz[i] - 1], dp[i][0][siz[i] - 1]);
maxl(dp[i][1][siz[i] - 1], dp[i - 1][1][0]);
maxl(dp[i][0][0], dp[i - 1][1][0]);
}
return max(dp[N - 1][0][siz[N - 1] - 1], dp[N - 1][1][0]);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |