답안 #883816

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
883816 2023-12-06T06:35:07 Z serifefedartar Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++17
0 / 100
1683 ms 115788 KB
#include <bits/stdc++.h>
using namespace std;

#define fast ios::sync_with_stdio(0);cin.tie(0);
#define s second
#define f first
typedef long long ll;
const ll MOD = 1e9 + 9;
const ll LOGN = 21;
const ll MAXN = 1e6 +  100;
#define int long long

struct Node {
	int ans, mx_pos;
	Node() { }
	Node(int _ans, int _mx_pos) : ans(_ans), mx_pos(_mx_pos) { }
}; 

vector<pair<pair<int,int>,int>> v[MAXN];
vector<int> w;
Node sg[4 * MAXN];
int lazy[MAXN], ans[MAXN];

Node merge(Node A, Node B) {
	Node new_node;
	new_node.ans = max(A.ans, B.ans);
	new_node.mx_pos = max(A.mx_pos, B.mx_pos);
	return new_node;
}

void push(int k, int a, int b) {
	sg[k].ans = max(sg[k].ans, sg[k].mx_pos - lazy[k]);
	if (a != b) {
		lazy[2*k] = min(lazy[2*k], lazy[k]);
		lazy[2*k+1] = min(lazy[2*k+1], lazy[k]);
	}
	lazy[k] = 1e9 + 1000;
}

void init(int k, int a, int b) {
	if (a == b) {
		sg[k].ans = 0;
		sg[k].mx_pos = w[a];
		lazy[k] = 1e9 + 1000;
		return ;
	}
	init(2*k, a, (a+b)/2);
	init(2*k+1, (a+b)/2+1, b);
	sg[k] = merge(sg[2*k], sg[2*k+1]);
	lazy[k] = 1e9 + 1000;
}

void update(int k, int a, int b, int q_l, int q_r, int val) {
	push(k, a, b);
	if (b < q_l || a > q_r)
		return ;
	if (q_l <= a && b <= q_r) {
		lazy[k] = val;
		push(k, a, b);
		return ;
	}
	update(2*k, a, (a+b)/2, q_l, q_r, val);
	update(2*k+1, (a+b)/2+1, b, q_l, q_r, val);
	sg[k] = merge(sg[2*k], sg[2*k+1]);
}

Node query(int k, int a, int b, int q_l, int q_r) {
	push(k, a, b);
	if (b < q_l || a > q_r)
		return Node(-1, -1);
	if (q_l <= a && b <= q_r)
		return sg[k];
	return merge(query(2*k, a, (a+b)/2, q_l, q_r), query(2*k+1, (a+b)/2+1, b, q_l, q_r));
}

signed main() {
	fast
	int N, M, l, r, k;
	cin >> N >> M;

	w = vector<int>(N+1);
	for (int i = 1; i <= N; i++)
		cin >> w[i];
	for (int i = 0; i < M; i++) {
		cin >> l >> r >> k;
		v[r].push_back({{l, k}, i});
	}
	init(1, 1, N);

	for (int i = 1; i <= N; i++) {
		update(1, 1, N, 1, i, w[i]);
		for (auto u : v[i]) {
			int Q = query(1, 1, N, u.f.f, i).ans;
			if (Q > u.f.s)
				ans[u.s] = 0;
			else
				ans[u.s] = 1;
		}
	}

	for (int i = 0; i < M; i++)
		cout << ans[i] << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 27996 KB Output is correct
2 Correct 7 ms 28332 KB Output is correct
3 Incorrect 6 ms 27996 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 27996 KB Output is correct
2 Correct 7 ms 28332 KB Output is correct
3 Incorrect 6 ms 27996 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1580 ms 115788 KB Output is correct
2 Incorrect 1683 ms 115608 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 127 ms 40788 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 27996 KB Output is correct
2 Correct 7 ms 28332 KB Output is correct
3 Incorrect 6 ms 27996 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 27996 KB Output is correct
2 Correct 7 ms 28332 KB Output is correct
3 Incorrect 6 ms 27996 KB Output isn't correct
4 Halted 0 ms 0 KB -