#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
signed main(){
int N, D; cin >> N >> D;
int C[N + 1] = {};
bool S2 = 1;
for (int i = 1; i <= N; i++) {
cin >> C[i];
if (C[i] > 1) S2 = 0;
}
int Q; cin >> Q;
int L[Q + 1], R[Q + 1];
for (int i = 1; i <= Q; i++) cin >> L[i] >> R[i];
if (S2){
int A[N + 1] = {}, P[N + 1] = {};
for (int i = 1; i <= N; i++){
if (C[i] == 1) A[i] = A[i - 1] + 1;
P[i] = P[i - 1] + C[i];
}
for (int i = 1; i <= Q; i++){
int l = L[i], r = R[i];
if (P[r] - P[l - 1] <= A[r]){
cout << 0 << endl;
}
else if (D == 1){
cout << P[r] - P[l - 1] - A[r] << endl;
}
else cout << -1 << endl;
}
return 0;
}
for (int q = 1; q <= Q; q++){
int l = L[q], r = R[q], suf[N + 1] = {};
int lst = 0, pos = 1, ans = 0;
int c[N + 1];
for (int i = 0; i <= N; i++) c[i] = C[i];
for (int i = l; i <= r; i++){
c[i] -= lst;
lst += c[i] % D;
if (c[i] < 0 or c[i] < c[i] % D) pos = 0;
c[i] -= c[i] % D;
// cout << c[i] << ' ';
}
if (!pos) {cout << -1 << endl; continue;}
int mi = c[r];
for (int i = r; i >= l; i--){
mi = min(mi, c[i]);
suf[i] = mi;
}
for (int i = l; i <= r; i++){
ans += (c[i] - suf[i]) / D;
}
cout << ans << endl;
// for (int i = 1; i <= n; i)
// cout << (pos ? ans : -1) << endl;
}
}
# | 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... |