Submission #1175899

#TimeUsernameProblemLanguageResultExecution timeMemory
1175899VicBVicFeast (NOI19_feast)C++20
100 / 100
126 ms9832 KiB
#include <bits/stdc++.h> using namespace std; //#define TESTS #define x first #define y second #define pii pair<int,int> #define veci vector<int> #define vecp vector<pii> #define all(x) x.begin(), x.end() #define pb(x,y) x.push_back(y) #define int long long const int maxn = 3e5+5; const int maxb = 40; int n,k, v[maxn]; //costul daca termini la i int d[maxn], mxd[maxn], arrd[maxn]; bool good(int l) { for(int i=0;i<n;i++) { d[i]=v[i]-l; mxd[i]=0; arrd[i]=1; } for(int i=1;i<n;i++) { if(d[i]<=d[i-1]+v[i]) { d[i]=d[i-1]+v[i]; arrd[i]=arrd[i-1]; } if(d[i]<=d[mxd[i-1]]+v[i]-l) { d[i]=d[mxd[i-1]]+v[i]-l; arrd[i]=arrd[mxd[i-1]]+1; } mxd[i]=(d[i]>d[mxd[i-1]]) ? i : mxd[i-1]; } return arrd[mxd[n-1]] >=k; } void solve() { cin>>n>>k; for(int i=0;i<n;i++) cin>>v[i]; int l=0; for(int b=(1ll<<maxb); b>0; b>>=1) { if(good(l+b)) l+=b; } good(l); cout<<d[mxd[n-1]]+l*arrd[mxd[n-1]]<<'\n'; } int32_t main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(0); int t=1; #ifdef TESTS cin>>t; #endif while(t--) { solve(); } return 0; }
#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...