#include <bits/stdc++.h>
#define int long long
#define f first
#define s second
using namespace std;
signed main() {
int n, k; cin >> n >> k;
vector<int> v(n+1), a(n+1), c(n+1);
for(int i=0;i<n;i++) cin >> v[i+1];
for(int i=n-1;i>0;i--) a[i] = max(0LL,(v[i]-v[i+1]+a[i+1]*k+k-1)/k);
priority_queue<pair<int,int>> pq;
a[0] = -1;
for(int i=n;i>=0;i--) {
pq.push({a[i],i});
while(pq.top().f > a[i]) {c[pq.top().s] = i; pq.pop();}
}
vector<vector<int>> adj(n+1, vector<int>(19,-1));
for(int i=0;i<=n;i++) adj[i][0] = c[i];
for(int i=1;i<19;i++) for(int j=0;j<=n;j++)
adj[j][i] = adj[adj[j][i-1]][i-1];
vector<int> p(n+1), q(n+1);
for(int i=1;i<=n;i++) p[i] = p[c[i]] + a[i]*(i-c[i]), q[i] = q[i-1]+a[i];
int _; cin >> _;
while(_--) {
int l, r; cin >> l >> r; int z = r;
for(int i=18; i>=0; i--) if(adj[z][i] >= l) z = adj[z][i];
if(v[l]-(a[l]-a[z])*k < 0) cout << "-1\n";
else cout << q[r]-q[l-1]-(p[r]-p[z]+a[z]*(z-l+1)) << '\n';
}
}
# | 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... |