Submission #1313499

#TimeUsernameProblemLanguageResultExecution timeMemory
1313499kookeudasCatfish Farm (IOI22_fish)C++20
100 / 100
119 ms38496 KiB
#include <bits/stdc++.h> using ll = long long; using namespace std; #pragma GCC optimize("O3") #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") int n,m; vector<ll> d[100002][2]; ll d2[100002]; vector<pair<int,ll>> mv[100002]; int ii(int i, int x){ return lower_bound(mv[i].begin(),mv[i].end(),make_pair(x,-(ll)1))-mv[i].begin(); } int ii2(int i, int x){ return lower_bound(mv[i].begin(),mv[i].end(),make_pair(x+1,-(ll)1))-mv[i].begin()-1; } long long max_weights(int N, int M, std::vector<int> X, std::vector<int> Y,std::vector<int> W) { n = N,m = M; for(int i=0;i<m;i++){ X[i]++; Y[i]++; mv[X[i]].push_back({Y[i],W[i]}); } for(int i=0;i<=n;i++)mv[i].push_back({0,0}); for(int i=1;i<=n;i++)sort(mv[i].begin(),mv[i].end()); for(int i=0;i<=n;i++)d2[i] = -1e18; for(int i=1;i<=n;i++){ for(int j=0;j<=mv[i].size();j++){ d[i][0].push_back(-1e18); d[i][1].push_back(-1e18); } } d[0][0].push_back(-1e18); d[0][0].push_back(-1e18); d[0][1].push_back(-1e18); d[0][1].push_back(-1e18); //d[0][0][0] = 0; d[0][1][0] = 0; for(int i=1;i<=n;i++){ d[i][0][(int)mv[i].size()-1] = max({d[i][0][(int)mv[i].size()-1],d2[i-1]+mv[i].back().second,d[i-1][0][ii(i-1,mv[i].back().first+1)]+mv[i].back().second}); for(int j=(int)mv[i].size()-2;j>=0;j--){ d[i][0][j] = max({d[i][0][j],d[i][0][j+1]+mv[i][j].second,d[i-1][0][ii(i-1,mv[i][j].first+1)]+mv[i][j].second}); } d2[i] = max(d2[i-1],d[i-1][1][(int)mv[i-1].size()-1]); d[i][1][0] = max({d2[i-1],d[i-1][0][0]}); for(int j=1;j<mv[i].size();j++){ d[i][1][j] = max({d[i][1][j],d[i][1][j-1]+mv[i][j].second,d[i-1][1][ii2(i-1,mv[i][j].first-1)]+mv[i][j].second}); } } ll ret = max({d2[n],d[n][0][0]}); return ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...