제출 #1272760

#제출 시각아이디문제언어결과실행 시간메모리
1272760AbdullahIshfaqFish 3 (JOI24_fish3)C++20
0 / 100
238 ms78228 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define MOD 1000000007 void solve() { ll n, d, q, l, r; cin >> n >> d; vector<ll> c(n + 1), req(n + 1), mn(n + 1), pre1(n + 1), pre2(n + 1); for (int i = 1; i <= n; i++) { cin >> c[i]; } for (int i = n - 1; i > 0; i--) { req[i] = max(0ll, (c[i] - c[i + 1] + d - 1 + req[i + 1] * d)); } priority_queue<pair<int, int>> pq; req[0] = -1; for (int i = n; i >= 0; i--) { pq.push({req[i], i}); while (req[i] < pq.top().first) { mn[pq.top().second] = i; pq.pop(); } } for (int i = 1; i <= n; i++) { pre1[i] = pre1[mn[i]] + req[i] * (i - mn[i]); pre2[i] = pre2[i - 1] + req[i]; } vector<vector<ll>> bl(n + 1, vector<ll>(20, -1)); for (int i = 0; i <= n; i++) { bl[i][0] = mn[i]; } for (int j = 1; j < 20; j++) { for (int i = 0; i <= n; i++) { bl[i][j] = bl[bl[i][j - 1]][j - 1]; } } cin >> q; for (int i = 0; i < q; i++) { cin >> l >> r; ll m = r; for (int i = 19; i >= 0; i--) { if (bl[m][i] >= l) { m = bl[m][i]; } } if (c[l] < (req[l] - req[m]) * d) { cout << -1 << '\n'; } else { cout << pre2[r] - pre2[l - 1] - (pre1[r] - pre1[m] + req[m] * (m - l + 1)) << '\n'; } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tests = 1; // cin >> tests; for (int i = 1; i <= tests; i++) 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...