Submission #1209962

#TimeUsernameProblemLanguageResultExecution timeMemory
1209962hehebjp123Feast (NOI19_feast)C++17
100 / 100
104 ms7484 KiB
#include <bits/stdc++.h> #define ll long long #define fi first #define se second #define pb push_back #define all(a) a.begin(),a.end() #define ii pair<ll,ll> using namespace std; const ll N=3e5+5; ll t,n,i,j,m,k; ll res=0,ans=0; ll dp[2][N],a[N]; ll check(ll k) { dp[0][0]=0; dp[1][0]=-1e18; ll res=0; for(ll i=1;i<=n;i++) { // calc dp[0][i]=max(dp[0][i-1],dp[1][i-1]+a[i]) dp[0][i]=max(dp[0][i-1],dp[1][i-1]); dp[1][i]=max(dp[0][i-1]+a[i]-k,dp[1][i-1]+a[i]); // cout<<sl[0][i]<<" "<<dp[0][i]<<" "<<sl[1][i]<<" "<<dp[1][i]<<'\n'; res=max(res,dp[1][i]); // cout<<dp[0][i]<<" "<<dp[1][i]<<'\n'; } ans=res; if(res==0) return 0; ll sl=0; bool op=0; for(ll i=n;i>0;i--) if(res==dp[1][i]) { if(!op) { sl++; op=1; } res-=a[i]; } else { if(op) { op=0; res+=k; } } ans+=sl*k; return sl; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin>>n>>k; for(i=1;i<=n;i++) cin>>a[i]; ll l=0,r=1e18,res=0; //return cout<<check(6),0; while(l<=r) { ll mid=(l+r)/2; ll kq=check(mid); //cout<<mid<<" "<<kq<<'\n'; if(kq<=k) { res=max(res,ans); r=mid-1; } else l=mid+1; } cout<<res; return 0; } /* 6 1 1 -2 3 -1 5 -6 */
#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...