Submission #290395

#TimeUsernameProblemLanguageResultExecution timeMemory
290395DymoK blocks (IZhO14_blocks)C++14
100 / 100
325 ms96488 KiB
#include<bits/stdc++.h> #define ll long long #define pb push_back #define all(n) n.begin(),n.end() #define endl "\n" #define pll pair<ll,ll> #define ff first #define ss second using namespace std; const ll maxn=2e5+500; const ll mod=1e9+7 ; const ll base=500; /// con 9 ngay ll a[maxn]; ll dp[maxn][120]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); //freopen("test.txt","r",stdin); if (fopen("Farm.INP","r")) { freopen("Farm.INP","r",stdin); freopen("Farm.OUT","w",stdout); } ll n, k; cin>> n>> k; for (int i=1;i<=n;i++) { cin>>a[i]; } for (int i=0;i<=n;i++) { for (int j=1;j<=k;j++) { dp[i][j]=1e15; } } dp[0][1]=1e15; for (int i=1;i<=n;i++) { if (i!=1) dp[i][1]=max(dp[i-1][1],a[i]); else dp[i][1]=a[i]; } for (int j=2;j<=k;j++) { stack<pll> st; for (int i=j;i<=n;i++) { ll nw=dp[i-1][j-1]; while (st.size()&&a[st.top().ss]<=a[i]) { nw=min(nw,st.top().ff); st.pop(); } ll t; if (st.size()) t=st.top().ss; else t=0; dp[i][j]=min(nw+a[i],dp[t][j]); st.push(make_pair(nw,i)); } } cout <<dp[n][k]; }

Compilation message (stderr)

blocks.cpp: In function 'int main()':
blocks.cpp:27:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   27 |         freopen("Farm.INP","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
blocks.cpp:28:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   28 |         freopen("Farm.OUT","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...