Submission #878969

#TimeUsernameProblemLanguageResultExecution timeMemory
878969eitanelbSparklers (JOI17_sparklers)C++14
100 / 100
24 ms2616 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; bool ok(int n, int k, vector<int>&ve, ll m){ vector<ll> v(n); for(int i=0;i<n;i++) v[i] = ve[i] - 2*m*i; //for(int i : v) cout<<i<<' '; cout<<endl; int bl = k-1, sr = k-1; for(int i=k-1;i>=0;i--) if(v[i] > v[bl]) bl=i; for(int i=k-1;i<n;i++) if(v[i] < v[sr]) sr=i; int nl=k-1, nr=k-1; ll mxl=v[k-1], mnr=v[k-1]; while(nl > bl || nr < sr){ int nnr=nr, nnl=nl; while(nl>bl && v[nl-1]>=mnr){ nl--; if(v[nl] > mxl) mxl=v[nl]; } while(nr<sr && v[nr+1]<=mxl){ nr++; if(v[nr] < mnr) mnr=v[nr]; } if(nnr==nr && nnl==nl) break; } if(nl > bl || nr < sr)return 0; nl=0; nr=n-1; mxl=v[0]; mnr=v[n-1]; if(mnr > mxl) return 0; while(nl < bl || nr > sr){ int nnr=nr, nnl=nl; while(nl<bl && v[nl+1]>=mnr){ nl++; if(v[nl] > mxl) mxl=v[nl]; } while(nr>sr && v[nr-1]<=mxl){ nr--; if(v[nr] < mnr) mnr=v[nr]; } if(nnr==nr && nnl==nl) break; } if(nl < bl || nr > sr)return 0; return 1; /*bool dp[n][n]; for(int i=0;i<n;i++)for(int j=0;j<n;j++) dp[i][j]=0; dp[k-1][k-1]=1; for(int sz=2;sz<=n;sz++){ for(int i=0;i+sz-1 < n;i++){ if((v[i+sz-1] <= v[i]) && (dp[i][i+sz-2] || dp[i+1][i+sz-1])) dp[i][i+sz-1]=1; } } return dp[0][n-1];*/ } int func(int n, int k, int t, vector<int>&v){ int s=0, e=1e9, m; while(e>s){ m = (e+s)/2; if(ok(n,k,v,m)) e=m; else s=m+1; } return (s+t-1)/t; } int main(){ ios::sync_with_stdio(0); cin.tie(0); int n,k,t; cin>>n>>k>>t; vector<int> v(n); for(int i=0;i<n;i++) cin>>v[i]; int res = func(n,k,t,v); cout<<res<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...