Submission #1313187

#TimeUsernameProblemLanguageResultExecution timeMemory
1313187zangdoK blocks (IZhO14_blocks)C++20
100 / 100
168 ms84768 KiB
/****************************************************************************** Online C++ Compiler. Code, Compile, Run and Debug C++ program online. Write your code in this editor and press "Run" button to compile and execute it. *******************************************************************************/ #include <bits/stdc++.h> using namespace std; const int MAXN = 1e5 +5; const int MAXK = 105; const long long INF = 1e12; int arr[MAXN] ,pos[MAXN],n,k; long long dp[MAXN][MAXK], pref[MAXN]; stack <int> gay; stack <pair<int,long long> > dcm; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); //freopen("blocks.in", "r", stdin); //freopen("blocks.out", "w", stdout); cin>>n>>k; for(int i=1; i<=n;i++) {cin>>arr[i]; pref[i]=pref[i-1]+arr[i];} for(int i=n; i>=1; i--){ while(!gay.empty()){ if(arr[i]>arr[gay.top()]) {pos[gay.top()]= i;gay.pop();} else break; } gay.push(i); } int maxt=-1; for(int i=0 ;i<=n;i++){ for(int j=0; j<=k; j++){ if(j>i) dp[i][j]= INF; } } for(int i=1 ; i<=n;i++) {maxt=max(arr[i],maxt); dp[i][1]=maxt;} for (int j=2; j<=k;j++){ while(!dcm.empty()) dcm.pop(); for(int i=1; i<=n;i++){ if(j>i) continue; long long vcl = dp[i-1][j-1]; while(!dcm.empty()){ pair <int, long long> chimbe = dcm.top(); if(arr[i]>=arr[chimbe.first]) {vcl = min(vcl, chimbe.second); dcm.pop();} else break; } dcm.push({i, vcl}); dp[i][j]= min(dp[pos[i]][j], vcl+arr[i]); //if(i==3&&j==3 ) cout<<dp[2][2]<<endl; } } //cout<<pos[6]<<endl; cout<<dp[n][k]; 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...