Submission #869344

#TimeUsernameProblemLanguageResultExecution timeMemory
869344pi61Rabbit Carrot (LMIO19_triusis)C++14
0 / 100
2 ms8792 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int n,k,a[200005],tree[800020], dp[200005]; void update(int pos, int val, int id=1, int l=1, int r=n) { if (pos < l or r < pos) return; if (l==r) { tree[id]=val; return; } int mid=(l+r)/2; update(pos,val,id*2,l,mid); update(pos,val,id*2+1,mid+1,r); tree[id]=min(tree[id*2],tree[id*2+1]); } int get(int val, int id=1, int l=1, int r=n) { if (tree[id] > val) return -1; if (l==r) return l; int mid=(l+r)/2; int L = get(val,id*2,l,mid); if (L != -1) return L; return get(val,id*2+1,mid+1,r); } signed main() { fill(tree,tree+800010,1e18); cin>>n>>k; n+=2; for (int i = 2; i < n; i++) cin>>a[i]; dp[n]=0; update(n,a[n]-n*k); for (int i = n-1; i > 0; i--) { // for (int i = 1; i <= 4*n; i++) cout<<tree[i]<<' ';cout<<endl; int cur=get(a[i]-i*k); dp[i]=dp[cur]+cur-i-1; update(i,a[i]-i*k); // cout<<cur<<' '<<dp[i]<<endl; } cout<<dp[1]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...