이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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);
  long long rem = 0;
  for (int i = 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... |