# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
672210 | Cutebol | K blocks (IZhO14_blocks) | C++17 | 1 ms | 340 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
void fopn(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
#define Scaramouche ios_base::sync_with_stdio(0) ; cin.tie(0) ; cout.tie(0);
#define int long long
#define itn int
#define endl "\n"
#define ff first
#define ss second
const int N = 2e5 + 5 ;
const int mod = 1e9 + 7 ;
const int inf = 1e12 ;
int n , m ;
int a[N] ;
int dp[104][N] ;
void solve(){
cin >> n >> m ;
for ( int i = 1 ; i <= n ; i ++ ) cin >> a[i] ;
for ( int i = 1 ; i <= n ; i ++ ) dp[1][i] = max ( dp[1][i-1] , a[i] ) ;
for ( int i = 2 ; i <= m ; i ++ )
for ( int j = 1 ; j <= n; j ++ ) dp[i][j] = inf ;
for ( int i = 2 ; i <= m ; i ++ ){
stack <pair<int,int>> st ;
for ( int j = i ; j <= n ; j ++ ){
int last = dp[i-1][j-1] ;
while ( !st.empty() && st.top().ff <= a[j] ){
last = min ( last , st.top().ss ) ;
st.pop() ;
}
if ( st.empty() || st.top().ff + st.top().ss >= a[j] )
st.push({a[j],last}) ;
dp[i][j] = min ( last + a[j] , st.top().ff + st.top().ss ) ;
}
}
cout << dp[m][n] ;
}
signed main(){
// fopn("blocks") ;
// Scaramouche ;
int t = 1 ;
// cin >> t ;
while ( t -- ) solve() ;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |