Submission #647811

#TimeUsernameProblemLanguageResultExecution timeMemory
647811ymmRabbit Carrot (LMIO19_triusis)C++17
100 / 100
40 ms5444 KiB
#include <bits/stdc++.h> #define Loop(x,l,r) for (ll x = (l); x < (ll)(r); ++x) #define LoopR(x,l,r) for (ll x = (r)-1; x >= (ll)(l); --x) typedef long long ll; typedef std::pair<int, int> pii; typedef std::pair<ll , ll > pll; using namespace std; const int N = 200'010; int fen[N]; void up(int i, int x) { ++i; while (i < N) { fen[i] = min(fen[i], x); i += i & -i; } } int get(int r) { int ans = N; while (r) { ans = min(ans, fen[r]); r -= r & -r; } return ans; } int dp[N]; int main() { cin.tie(0) -> sync_with_stdio(false); int n, jmp; cin >> n >> jmp; vector<pii> vec; vec.push_back({-jmp*(n+1), ~(n+1)}); Loop (i,1,n+1) { int x; cin >> x; if (x-jmp*i <= 0) vec.push_back({x-jmp*i, ~i}); } sort(vec.begin(), vec.end()); reverse(vec.begin(), vec.end()); fill(dp, dp+N, N); fill(fen, fen+N, N); dp[0] = 0; up(0, 0); for (auto [_, i] : vec) { i = ~i; dp[i] = get(i) + i - 1; up(i, dp[i] - i); } cout << dp[n+1] << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...