This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) 42
#endif
int main() {
ios::sync_with_stdio(false); cin.tie(nullptr);
int n; long long d; cin >> n >> d;
auto get = [&](long long i, long long j) {
if ((i -= j) < 0) {
i += d;
}
return i;
};
vector<long long> c(n), pf(n), a(n), sum(n);
for (int i = 0, rem = 0; i < n; ++i) {
cin >> c[i];
pf[i] = (i ? pf[i - 1] : 0) + get(c[i] % d, rem);
rem = c[i] % d;
a[i] = c[i] - pf[i];
sum[i] = (i ? sum[i - 1] : 0) + a[i];
}
int q; cin >> q;
vector<array<int, 3>> queries;
for (int i = 0; i < q; ++i) {
int l, r; cin >> l >> r; --l, --r;
queries.push_back({l, r, i});
}
sort(queries.begin(), queries.end(), [&](const auto &a, const auto &b) {
return a[1] < b[1];
});
vector<pair<int, long long>> st = {{-1, 0}};
vector<long long> res(q);
auto Sum = [&](int l, int r) {
return sum[r] - (l == 0 ? 0 : sum[l - 1]);
};
auto qry = [&](int i, int j) -> long long {
auto it = lower_bound(st.begin(), st.end(), pair<int, long long>{i, 0});
auto [p, s] = *it;
long long rem = c[i] % d;
if (a[p] + pf[i] - rem < 0) {
return -1;
}
long long res = st.back().second - s + a[p] * (p - i + 1);
return (Sum(i, j) - res) / d;
};
for (int i = 0, j = 0; i < n; ++i) {
while (st.size() > 1 && a[st.back().first] >= a[i]) {
st.pop_back();
}
st.push_back({i, st.back().second + (i - st.back().first) * a[i]});
while (j < q && queries[j][1] == i) {
res[queries[j][2]] = qry(queries[j][0], i);
++j;
}
}
for (int i = 0; i < q; ++i) {
cout << res[i] << "\n";
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |