제출 #1272765

#제출 시각아이디문제언어결과실행 시간메모리
1272765muhammad-ahmadFish 3 (JOI24_fish3)C++20
16 / 100
2094 ms13848 KiB
#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 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...