제출 #1188313

#제출 시각아이디문제언어결과실행 시간메모리
1188313mannshah1211Fish 3 (JOI24_fish3)C++17
28 / 100
192 ms31084 KiB
/** * author: tourist * created: 19.04.2025 09:45:38 **/ #include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "algo/debug.h" #else #define debug(...) 42 #endif const long long inf = (long long) 1e18; int32_t main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, d; cin >> n >> d; vector<long long> c(n); for (int i = 0; i < n; i++) { cin >> c[i]; } vector<long long> v(n); for (int i = n - 2; i >= 0; i--) { if (c[i] >= c[i + 1]) { v[i] = v[i + 1] + (c[i] - c[i + 1] + d - 1) / d; } else { v[i] = v[i + 1] - (c[i + 1] - c[i]) / d; } } vector<long long> p(n + 1); for (int i = 0; i < n; i++) { p[i + 1] = p[i] + v[i]; } vector<vector<pair<int, int>>> query(n); int q; cin >> q; for (int qq = 0; qq < q; qq++) { int l, r; cin >> l >> r; --l; --r; query[r].emplace_back(l, qq); } vector<long long> ans(q); vector<pair<int, long long>> st; st.emplace_back(-1, 0); for (int i = 0; i < n; i++) { while (st.size() > 1 && v[st.back().first] >= v[i]) { st.pop_back(); } st.emplace_back(i, st.back().second + (int64_t(v[i]) * int64_t(i - st.back().first))); for (auto [l, qi] : query[i]) { int id = lower_bound(st.begin(), st.end(), make_pair(l, -inf)) - st.begin(); ans[qi] = p[i + 1] - p[l] - (st.back().second - st[id - 1].second - int64_t(v[st[id].first]) * int64_t(l - 1 - st[id - 1].first)); if (c[l] < int64_t(d) * int64_t(v[l] - v[st[id].first])) { ans[qi] = -1; } } } for (int i = 0; i < q; i++) { cout << ans[i] << '\n'; } return 0; }
#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...