#include "fish.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define in array<int, 2>
#define iln array<ll, 2>
#define pb push_back
#define pob pop_back
const ll INF = 1e17;
ll max_weights(int n, int m, vector<int> x, vector<int> y, vector<int> w)
{
vector<in> loc[n+1];//loc[i][k] = kth from bottom in ith column.
for(auto &s: x) s++;
for(auto &s: y) s++;
for(int i = 1; i <= n; i++)
loc[i].pb({0, 0});
for(int i = 0; i < m; i++)
loc[x[i]].pb({y[i], w[i]});
//pre-processing done.
vector<array<ll, 4>> dp[n+1];
vector<ll> pref[n+1];
ll DP[n+1];
for(int i = 1; i <= n; i++)
{
sort(loc[i].begin(), loc[i].end()); loc[i].pb({n+1, 0});
pref[i].assign(loc[i].size(), 0ll);
for(int j = 1; j < loc[i].size(); j++)
pref[i][j] = pref[i][j-1] + loc[i][j][1];
dp[i].resize(loc[i].size());
}
DP[0] = DP[1] = 0;
for(int i = 2; i <= n; i++)
{
dp[i][0][0] = dp[i-1][0][0];
int D = loc[i-1].size()-1; ll Val = dp[i-1][D][0] + pref[i].back();
for(int j = loc[i].size()-1; j >= 0; j--)
{
while((D > 0) && (loc[i-1][D-1][0] > loc[i][j][0]))
{
D--;
Val = max(Val, dp[i-1][D][0] + pref[i][j]);
}
if(j)
dp[i][j][3] = Val - pref[i][j-1];
else
dp[i][j][3] = Val;
}
dp[i][0][0] = max(dp[i][0][0], dp[i][0][3]);
int Dd = 0; ll VAL = -INF;
for(int j = 1; j < loc[i].size(); j++)
{
dp[i][j][1] = dp[i-1][0][0];
while(((Dd+1) < loc[i-1].size()) && (loc[i-1][Dd+1][0] < loc[i][j][0]))
{
Dd++;
VAL = max(VAL, dp[i-1][Dd][2] - pref[i-1][Dd-1]);
}
dp[i][j][2] = max(DP[i-2], VAL) + pref[i-1][Dd];
}
DP[i] = dp[i][0][0];
for(int j = 1; j < loc[i].size(); j++)
{
dp[i][j][0] = max(max(dp[i][j][1], dp[i][j][2]), dp[i][j][3]);
DP[i] = max(DP[i], dp[i][j][0]);
}
}
return DP[n];
}
# | 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... |