# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1106967 | I_am_Polish_Girl | Catfish Farm (IOI22_fish) | C++17 | 85 ms | 21420 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "fish.h"
#include <vector>
#include <algorithm>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <stack>
#include <queue>
#include <cmath>
#include <random>
#include <chrono>
#include <iomanip>
#include <iostream>
#include <bitset>
#include <cmath>
#include <string>
using namespace std;
int log_ = 23;
long long inf = 2000000007000000007ll;
int mod = 1000000007;
int p = 523;
#include <vector>
long long max_weights(int N, int M, std::vector<int> X, std::vector<int> Y, std::vector<int> W)
{
int n = N;
vector <vector <pair <int, int>>> vp(n);
for (int i = 0; i < X.size(); i++)
{
vp[X[i]].push_back({ Y[i] , W[i] });
}
for (int i = 0; i < n; i++)
{
sort(vp[i].begin(), vp[i].end());
}
vector <vector <long long>> dp0(n);
vector <vector <long long>> dp1(n);
for (int i = 0; i < n; i++)
{
dp0[i].resize(vp[i].size());
dp1[i].resize(vp[i].size());
}
long long ans = 0;
long long mx_ = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < vp[i].size(); j++)
{
ans = max(ans , mx_ + vp[i][j].second);
}
if (i > 0)
{
if (i != n - 1)
{
int ind = 0;
int sz = vp[i].size();
long long mx = 0;
for (int j = 0; j < sz; j++)
{
while ((ind < vp[i - 1].size()) and (vp[i - 1][ind].first < vp[i][j].first))
{
mx = max(mx, dp0[i - 1][ind]);
ind++;
}
mx = max(mx, mx_);
dp0[i][j] = mx + vp[i][j].second;
mx = max(mx, dp0[i][j]);
}
}
if (i != 0)
{
int ind = vp[i - 1].size();
ind--;
int sz = vp[i].size();
long long mx = 0;
for (int j = sz - 1; j >= 0; j--)
{
while ((ind >= 0) and (vp[i - 1][ind].first > vp[i][j].first))
{
mx = max(mx, dp1[i - 1][ind]);
ind--;
}
mx = max(mx, mx_);
dp1[i][j] = mx + vp[i][j].second;
if (i < n - 1)
{
dp0[i][j] = max(dp0[i][j], dp1[i][j]);
}
if (ind >= 0)
{
if (vp[i - 1][ind].first == vp[i][j].first)
{
dp0[i][j] = max(dp1[i - 1][ind] + vp[i][j].second, dp0[i][j]);
}
}
mx = max(mx, dp1[i][j]);
}
}
long long mx = -inf;
for (int j = 0; j < vp[i].size(); j++)
{
mx += vp[i][j].second;
mx = max(mx, dp0[i][j]);
dp0[i][j] = mx;
}
int sz = vp[i].size();
mx = -inf;
for (int j = sz - 1; j >= 0; j--)
{
mx += vp[i][j].second;
mx = max(mx, dp0[i][j]);
dp0[i][j] = mx;
}
}
else
{
long long s = 0;
for (int j = 0; j < vp[i].size(); j++)
{
s += vp[i][j].second;
dp0[i][j] = s;
dp1[i][j] = 0;
}
}
for (int j = 0; j < vp[i].size(); j++)
{
ans = max(ans, dp0[i][j]);
ans = max(ans, dp1[i][j]);
}
if (i - 1 >= 0)
{
for (int j = 0; j < vp[i - 1].size(); j++)
{
mx_ = max(mx_, dp0[i - 1][j]);
mx_ = max(mx_, dp1[i - 1][j]);
}
}
}
return ans;
}
Compilation message (stderr)
# | 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... |