제출 #1217896

#제출 시각아이디문제언어결과실행 시간메모리
1217896trimkusFish 3 (JOI24_fish3)C++20
9 / 100
2095 ms6316 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = double;

int main() {
	//~ ofstream cout("out.txt");
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n;
	ll d;
	cin >> n >> d;
	vector<ll> a(n);
	vector<ll> ps(n);
	for (int i = 0; i < n; ++i) {
		cin >> a[i];
		ps[i] += a[i];
		if (i) ps[i] += ps[i - 1];
	}
	vector<int> left(n, -1);
	for (int i = 0; i < n; ++i) {
		left[i] = (a[i] == 0 ? i : -1);
		if (i) left[i] = max(left[i], left[i - 1]);
	}
	int q;
	cin >> q;
	while (q--) {
		int l, r;
		cin >> l >> r;
		--l; --r;
		ll take = a[r];
		ll res = 0;
		bool ok = true;
		for (int i = r - 1; i >= l; --i) {
			ll left = 0, right = (a[i]) / d;
			ll now = -1;
			//~ cerr << take << " -> ";
			while (left <= right) {
				ll mid = (left + right) / 2;
				ll na = a[i] - mid * d;
				if (na <= take) {
					right = mid - 1;
					now = mid;
				} else {
					left = mid + 1;
				}
			}
			if (now == -1) {
				ok = false;
				break;
			}
			res += now;
			take = a[i] - now * d;
		}
		//~ cerr << "res = ";
		if (!ok) cout << "-1\n";
		else cout << res << "\n";
	}
}

#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...