Submission #555701

#TimeUsernameProblemLanguageResultExecution timeMemory
555701uroskK blocks (IZhO14_blocks)C++14
0 / 100
1 ms360 KiB
// __builtin_popcount(x) // __builtin_popcountll(x) #define here cerr<<"===========================================\n" #include <bits/stdc++.h> #define ld double #define ll long long #define ull unsigned long long #define llinf 100000000000000000LL // 10^17 #define iinf 2000000000 // 2*10^9 #define pb push_back #define popb pop_back #define fi first #define sc second #define endl '\n' #define pii pair<int,int> #define pll pair<ll,ll> #define pld pair<ld,ld> #define sz(a) int(a.size()) #define all(a) a.begin(),a.end() #define ceri(a,l,r) {for(ll i_ = l;i_<=r;i_++) cerr<<a[i_]<< " ";cerr<<endl;} using namespace std; #define maxn 100005 #define maxk 105 #define lg 25 ll n,k; ll a[maxn]; ll dp[maxn]; ll ndp[maxn]; ll st[maxn][lg]; ll powi[maxn]; ll get(ll l,ll r){ ll len = (r-l+1); ll k = powi[len]; ll ans = max(st[l][k],st[r-(1<<k)+1][k]); return ans; } void reshi(ll l,ll r,ll optl,ll optr){ if(l>r) return; if(optl>optr) return; ll mid = (l+r)/2; ndp[mid] = ndp[mid-1] + a[mid]; ll opt = mid-1; for(ll i = optl;i<=min(optr,mid-1);i++){ if(dp[i] + get(i+1,mid) < ndp[mid]){ opt = i; ndp[mid] = dp[i] + get(i+1,mid); } } //cerr<<l<< " "<<r<< " "<<optl<< " "<<optr<<" "<<mid<< " "<<opt<<endl; reshi(l,mid-1,optl,opt); reshi(mid+1,r,opt,optr); } int main(){ ios_base::sync_with_stdio(false);cerr.tie(0);cout.tie(0);cin.tie(0); cin >> n >> k; for(ll i = 1;i<=n;i++) cin >> a[i]; for(ll i = 1;i<=n;i++) st[i][0] = a[i]; for(ll j = 1;j<lg;j++){ for(ll i = 1;i+(1<<j)-1<=n;i++){ st[i][j] = max(st[i][j-1],st[i+(1<<(j-1))][j-1]); } } for(ll j = 0;j<lg;j++){ if((1<<j)>n) break; powi[(1<<j)] = j; } for(ll i = 1;i<=n;i++){ if(powi[i]==0) powi[i] = powi[i-1]; } fill(dp,dp+n+1,llinf); dp[0] = 0; for(ll ii = 1;ii<=k;ii++){ fill(ndp,ndp+n+1,llinf); //here; reshi(1,n,0,n); //cerr<<"dp: "; for(ll i = 1;i<=n;i++) dp[i] = ndp[i]; for(ll i = 0;i<ii;i++) dp[i] = llinf; //ceri(ndp,0,n); } cout<<dp[n]<<endl; return 0; } /* 5 1 1 2 3 4 5 out: 5 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...