제출 #1217928

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

struct RMQ {
	int n;
	vector<ll> tree;
	RMQ(int n) {
		this->n = n;
		tree = vector<ll>(4 * n);
	}
	void update(int i, int l, int r, int qp, ll val) {
		if (l == r) {
			tree[i] = val;
			return;
		}
		int m = (l + r) / 2;
		if (qp <= m) update(i * 2, l, m, qp, val);
		else update(i * 2 + 1, m + 1, r, qp, val);
		tree[i] = min(tree[i * 2], tree[i * 2 + 1]);
	}
	void update(int qp, ll val) {
		update(1, 1, n, qp, val);
	}
	ll query(int i, int l, int r, int ql, int qr) {
		if (ql > r || l > qr) return LLONG_MAX;
		if (ql <= l && r <= qr) return tree[i];
		int m = (l + r) / 2;
		return min(query(i * 2, l, m, ql, qr), query(i * 2 + 1, m + 1, r, ql, qr));
	}
	ll query(int ql, int qr) {
		return query(1, 1, n, ql, qr);
	}
};

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 + 1);
	vector<ll> ps(n + 1);
	RMQ mn(n);
	for (int i = 1; i <= n; ++i) {
		cin >> a[i];
		ps[i] += a[i];
		if (i) ps[i] += ps[i - 1];
		mn.update(i, a[i]); 
	}
	vector<int> left(n + 1, -1);
	deque<int> dq;
	for (int i = 1; i <= n; ++i) {
		if (dq.size() && dq.back() > a[i]) while (dq.size()) dq.pop_back();
		dq.push_back(a[i]);
		left[i] = dq.size();
	}
	//~ for (int i = 1; i <= n; ++i) {
		//~ cout << a[i] << " ";
	//~ }
	//~ cout << "\n";
	//~ for (int i = 1; i <= n; ++i) {
		//~ cout << left[i] << " ";
	//~ }
	//~ cout << "\n";
	int q;
	cin >> q;
	while (q--) {
		int l, r;
		cin >> l >> r;
		if (r - left[r] < l) {
			cout << "0\n";
			continue;
		}
		int i = r - left[r];
		ll reduce = mn.query(l, r);
		ll take = ps[i] - ps[l - 1] - reduce * (i - l + 1);
		cout << take << "\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...