Submission #1284262

#TimeUsernameProblemLanguageResultExecution timeMemory
1284262trandangquang메기 농장 (IOI22_fish)C++20
100 / 100
100 ms26988 KiB
#include<bits/stdc++.h> using namespace std; #define foru(i,a,b) for(int i=(a); i<=(b); ++i) #define ford(i,a,b) for(int i=(a); i>=(b); --i) #define rep(i,a) for(int i=0; i<(a); ++i) #define sz(a) (int)(a).size() #define all(a) (a).begin(),(a).end() #define bit(s,i) (((s)>>(i))&1) #define ii pair<int,int> #define fi first #define se second #define pb push_back #define eb emplace_back #define ll long long #define _ << " " << template <class X, class Y> bool maxi(X &x, Y y){return x<y?x=y,true:false;} template <class X, class Y> bool mini(X &x, Y y){return x>y?x=y,true:false;} const int MAX = 303030; ll mxDP[MAX]; vector<ii> y[MAX]; vector<array<ll,2>> dp[MAX]; ll max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W){ rep(i,M){ ++X[i]; ++Y[i]; y[X[i]].eb(Y[i]-1, W[i]); } y[0].eb(0,0); foru(i,0,N){ y[i].eb(N,0); sort(all(y[i])); dp[i].resize(sz(y[i]), {(ll)-1e18,(ll)-1e18}); } dp[0][0][0]=0; foru(i,1,N){ int k=0; ll mxz=-1e18, mxo=-1e18, sum=0; foru(j,0,sz(y[i])-1){ while(k<sz(y[i-1])){ if(y[i-1][k].fi<y[i][j].fi){ mxz=max(mxz,dp[i-1][k][0])+y[i-1][k].se; mxo=max(mxo,dp[i-1][k][1]); sum+=y[i-1][k].se; ++k; } else{ mxz=max(mxz,dp[i-1][k][0]); mxo=max(mxo,dp[i-1][k][1]); break; } } dp[i][j][0]=max(mxz,mxo); if(i-2>=0) maxi(dp[i][j][0], mxDP[i-2]); maxi(mxDP[i],dp[i][j][0]); } mxz=-1e18; k=sz(y[i-1])-1; ford(j,sz(y[i])-1,0){ while(k>=0){ if(y[i-1][k].fi>y[i][j].fi){ mxz=max(mxz,max(dp[i-1][k][0],dp[i-1][k][1])); --k; } else{ break; } } mxz=mxz+y[i][j].se; dp[i][j][1]=max(mxz,mxo); maxi(mxDP[i],dp[i][j][1]); } } return mxDP[N]; } //int main(){ // cout<<max_weights(5,4,{0,1,4,3},{2,1,4,3},{5,2,1,3}); //}
#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...