제출 #1188311

#제출 시각아이디문제언어결과실행 시간메모리
1188311mannshah1211Fish 3 (JOI24_fish3)C++17
100 / 100
197 ms33028 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

#define int long long

const int inf = 1e18;

int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int n, d;
  cin >> n >> d;
  vector<int> 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...