Submission #1138669

#TimeUsernameProblemLanguageResultExecution timeMemory
1138669LCJLYStudentsko (COCI14_studentsko)C++20
0 / 100
59 ms131072 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ld long double #define show(x,y) cout << y << " " << #x << endl; #define show2(x,y,i,j) cout << y << " " << #x << " " << j << " " << #i << endl; #define show3(x,y,i,j,p,q) cout << y << " " << #x << " " << j << " " << #i << " " << q << " " << #p << endl; #define show4(x,y) for(auto it:y) cout << it << " "; cout << #x << endl; typedef pair<int,int>pii; typedef pair<int,pii>pi2; mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count()); int n,k; int arr[5005]; int pre[5005]; int suf[5005]; int arr2[5005]; int memo[5005][5005]; int dp(int l, int r){ if(l==r) return 0; if(memo[l][r]!=-1) return memo[l][r]; int ans=1e15; int cost=(r>pre[l]); int cost2=(l<suf[r]); ans=min(ans,dp(l+1,r)+cost); ans=min(ans,dp(l,r-1)+cost2); return memo[l][r]=ans; } void solve(){ cin >> n >> k; vector<int>v; for(int x=0;x<n;x++){ cin >> arr[x]; v.push_back(arr[x]); } sort(v.begin(),v.end()); vector<pii>v2; for(int x=0;x<n;x++){ int index=lower_bound(v.begin(),v.end(),arr[x])-v.begin(); arr[x]=index/k; v2.push_back({arr[x],x}); } sort(v2.begin(),v2.end()); for(int x=0;x<n;x++){ arr2[v2[x].second]=x; } vector<int>stk; for(int x=0;x<n;x++){ while(!stk.empty()&&arr2[stk.back()]<arr2[x]) stk.pop_back(); if(!stk.empty()) pre[arr2[x]]=stk.back(); else pre[arr2[x]]=n+1; stk.push_back(x); //cout << pre[x] << " "; } //cout << "\n"; stk.clear(); for(int x=n-1;x>=0;x--){ while(!stk.empty()&&arr2[stk.back()]>arr2[x]) stk.pop_back(); if(!stk.empty()) suf[arr2[x]]=stk.back(); else suf[arr2[x]]=0; stk.push_back(x); } memset(memo,-1,sizeof(memo)); cout << dp(0,n-1); } int32_t main(){ ios::sync_with_stdio(0); cin.tie(0); //freopen("in.txt","r",stdin); //freopen("in.txt","w",stdout); int t=1; //cin >> t; while(t--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...