Submission #874013

#TimeUsernameProblemLanguageResultExecution timeMemory
8740138pete8K blocks (IZhO14_blocks)C++14
100 / 100
401 ms3084 KiB
#include<iostream> #include<stack> #include<map> #include<vector> #include<string> #include<unordered_map> #include <queue> #include<cstring> #include<limits.h> #include<cmath> #include<set> #include<algorithm> #include<bitset> #include <iomanip> using namespace std; #define ll long long #define f first #define endl "\n" #define s second #define pii pair<int,int> #define ppii pair<pii,pii> #define vi vector<int> #define pb push_back //#define p push #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define F(n) for(int i=0;i<n;i++) #define lb lower_bound #define ub upper_bound #define fastio ios::sync_with_stdio(false);cin.tie(NULL); using namespace std; #pragma GCC optimize ("03,unroll-lopps") #define double long double const int mxn=1e5,inf=1e9; int seg[2*mxn+10],n,dp[mxn+10],l[mxn+10],r[mxn+10],v[mxn+10],k; int qry(int l,int r){ int ans=inf; for(l+=n,r+=n;l<=r;l>>=1,r>>=1){ if(l&1)ans=min(ans,seg[l++]); if(!(r&1))ans=min(ans,seg[r--]); } return ans; } void build(){for(int i=n-1;i>=0;i--)seg[i]=min(seg[i<<1],seg[(i<<1)^1]);} int32_t main(){ fastio cin>>n>>k; for(int i=1;i<=n;i++)cin>>v[i]; stack<int>st; n++; for(int i=1;i<n;i++){ while(!st.empty()&&v[st.top()]<=v[i])st.pop(); if(!st.empty())l[i]=st.top(); else l[i]=0; st.push(i); } for(int i=0;i<2*n;i++)seg[i]=inf; seg[n]=0; build(); stack<int>st2; for(int j=0;j<k;j++){ for(int i=0;i<n;i++)dp[i]=inf; for(int i=j;i<n;i++){ int g=qry(l[i],i-1)+v[i]; while(!st2.empty()&&(v[st2.top()]<=v[i]))st2.pop(); if(!st2.empty())g=min(g,dp[st2.top()]); dp[i]=g; st2.push(i); } for(int i=0;i<n;i++)seg[i+n]=dp[i]; build(); while(!st2.empty())st2.pop(); } cout<<dp[n-1]; }

Compilation message (stderr)

blocks.cpp:32:40: warning: bad option '-funroll-lopps' to pragma 'optimize' [-Wpragmas]
   32 | #pragma GCC optimize ("03,unroll-lopps")
      |                                        ^
blocks.cpp:36:20: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   36 | int qry(int l,int r){
      |                    ^
blocks.cpp:44:12: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   44 | void build(){for(int i=n-1;i>=0;i--)seg[i]=min(seg[i<<1],seg[(i<<1)^1]);}
      |            ^
blocks.cpp:45:14: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   45 | int32_t main(){
      |              ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...