#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair <int, int>
#define fi first
#define se second
#define mp make_pair
const int NM = 3e5;
struct node{
int l, r, cl, cr;
};
int N, D, C[NM+5], Q;
vector <pii> arr[NM+5];
stack <node> S;
int st[4*NM+5], lazy[4*NM+5];
int ans[NM+5];
void down(int id, int l, int r){
int mid = (l+r)/2;
st[2*id] += lazy[id]*(mid-l+1); st[2*id+1] += lazy[id]*(r-mid);
lazy[2*id] += lazy[id]; lazy[2*id+1] += lazy[id];
lazy[id] = 0;
}
void update(int id, int l, int r, int u, int v, int val){
if (v < l || u > r) return;
if (l >= u && r <= v){
st[id] += (r-l+1)*val;
lazy[id] += val;
return;
}
down(id, l, r);
int mid = (l+r)/2;
update(2*id, l, mid, u, v, val);
update(2*id+1, mid+1, r, u, v, val);
st[id] = st[2*id]+st[2*id+1];
}
int get(int id, int l, int r, int u, int v){
if (v < l || u > r) return 0;
if (l >= u && r <= v) return st[id];
down(id, l, r);
int mid = (l+r)/2;
return get(2*id, l, mid, u, v)+get(2*id+1, mid+1, r, u, v);
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N >> D;
for (int i = 1; i <= N; i++) cin >> C[i];
cin >> Q;
for (int i = 1; i <= Q; i++){
int l, r; cin >> l >> r;
arr[r].push_back(mp(l, i));
}
for (int i = 1; i <= N; i++){
int cur = C[i], j = i;
while (!S.empty()){
node tmp = S.top();
if (tmp.cr <= cur) break;
S.pop();
int num = (tmp.cr-cur+D-1)/D;
update(1, 1, N, tmp.l, tmp.r, num);
cur = tmp.cl-num*D, j = tmp.l;
}
S.push(node{j, i, cur, C[i]});
for (pii p : arr[i]){
int j = p.fi, id = p.se;
if (C[j]-get(1, 1, N, j, j)*D < 0){
ans[id] = -1;
continue;
}
ans[id] = get(1, 1, N, j, i);
}
}
for (int i = 1; i <= Q; i++) cout << ans[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... |