제출 #1343864

#제출 시각아이디문제언어결과실행 시간메모리
1343864nicolo_010Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
8 / 100
3094 ms81600 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;

struct SegTree {
	vector<int> tree;
	SegTree(int n) {
		tree.assign(4*n, -1);
	}
	void query(int p, int l, int r, int i, int x) {
		if (l>i||r<i) return;
		if (l==r) {
			tree[p] = x;
			return;
		}
		int m = (l+r)/2;
		query(2*p, l, m, i, x);
		query(2*p+1, m+1, r, i, x);
		tree[p] = max(tree[2*p], tree[2*p+1]);
	}
	int rmq(int p, int l, int r, int i, int j) {
		if (i>j) return -1;
		if (l>j || r<i) return -1;
		if (i<=l && r<=j) return tree[p];
		int m = (l+r)/2;
		return max(rmq(2*p, l, m, i, j), rmq(2*p+1, m+1, r, i, j));
	}
};

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n, m; cin >> n >> m;
	vector<int> a(n);
	for (int i=0; i<n; i++) {
		cin >> a[i];
	}
	while (m--) {
		int l, r, k; cin >> l >> r >> k;
		l--; r--;
		vector<int> b;
		for (int i=l; i<=r; i++) {
			b.push_back(a[i]);
		}
		vector<int> c = b;
		sort(c.begin(), c.end());
		map<int, vector<int>> mp;
		int s = b.size();
		for (int i=0; i<s; i++) {
			mp[b[i]].push_back(i);
		}
		SegTree st(s);
		for (int i=0; i<s; i++) {
			st.query(1, 0, s-1, i, b[i]);
		}
		bool can = true;
		for (int i=s-1; i>=0; i--) {
			int need = c[i];
			int idx = mp[need].back();
			int sm=c[i];
			int mx = st.rmq(1, 0, s-1, idx+1, i);
			sm += mx;
			if (sm>k && mx!=-1) can = false;
			st.query(1, 0, s-1, idx, 0);
			mp[need].pop_back();
		}
		cout << (can ? 1 : 0) << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...