Submission #458263

# Submission time Handle Problem Language Result Execution time Memory
458263 2021-08-08T03:30:46 Z pavement Two Antennas (JOI19_antennas) C++17
0 / 100
382 ms 59736 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#ifdef _WIN32
#define getchar_unlocked _getchar_nolock
#endif
#define int long long
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define ppb pop_back
#define eb emplace_back
#define g0(a) get<0>(a)
#define g1(a) get<1>(a)
#define g2(a) get<2>(a)
#define g3(a) get<3>(a)
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
typedef double db;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef tuple<int, int, int> iii;
typedef tuple<int, int, int, int> iiii;
typedef tree<ii, null_type, less<ii>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;

int N, Q, H[200005], A[200005], B[200005], out[200005];
vector<int> add[200005], del[200005];
vector<ii> qu[200005];

struct node {
	node *left, *right;
	int S, E, mx, mi, mxv, miv, val;
	bool ip;
	node(int _s, int _e) : S(_s), E(_e), val(-1e16), ip(0) {
		mx = mxv = -1e16;
		mi = miv = 1e16;
		if (S == E) return;
		int M = (S + E) >> 1;
		left = new node(S, M);
		right = new node(M + 1, E);
	}
	void prop() {
		if (S == E || !ip) return;
		left->mxv = max(left->mxv, mxv);
		left->miv = min(left->miv, miv);
		right->mxv = max(right->mxv, mxv);
		right->miv = min(right->miv, miv);
		if (left->mi != 1e16 && left->miv != 1e16) left->val = max({left->val, llabs(left->mi - left->mxv), llabs(left->mx - left->miv)});
		if (right->mi != 1e16 && right->miv != 1e16) right->val = max({right->val, llabs(right->mi - right->mxv), llabs(right->mx - right->miv)});
		ip = 0;
		mxv = -1e16;
		miv = 1e16;
	}
	void set(int p) {
		if (S == E) {
			mx = mi = H[S];
			mxv = -1e16;
			miv = 1e16;
			return;
		}
		int M = (S + E) >> 1;
		prop();
		if (p <= M) left->set(p);
		else right->set(p);
		mx = max(left->mx, right->mx);
		mi = min(left->mi, right->mi);
		val = max(left->val, right->val);
	}
	void unset(int p) {
		if (S == E) {
			mx = mxv = -1e16;
			mi = miv = 1e16;
			return;
		}
		int M = (S + E) >> 1;
		prop();
		if (p <= M) left->unset(p);
		else right->unset(p);
		mx = max(left->mx, right->mx);
		mi = min(left->mi, right->mi);
		val = max(left->val, right->val);
	}
	void upd(int l, int r, int v) {
		if (l > E || r < S) return;
		if (l <= S && E <= r) {
			mxv = max(mxv, v);
			miv = min(miv, v);
			if (mi != 1e16) val = max({val, llabs(mi - mxv), llabs(mx - miv)});
			ip = 1;
			return;
		}
		prop();
		left->upd(l, r, v);
		right->upd(l, r, v);
		mx = max(left->mx, right->mx);
		mi = min(left->mi, right->mi);
		val = max(left->val, right->val);
	}
	int qry(int l, int r) {
		if (l > E || r < S) return -1e16;
		if (l <= S && E <= r) return val;
		prop();
		return max(left->qry(l, r), right->qry(l, r));
	}
} *root;

main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> N;
	for (int i = 1; i <= N; i++) cin >> H[i] >> A[i] >> B[i];
	cin >> Q;
	for (int i = 1, l, r; i <= Q; i++) {
		cin >> l >> r;
		qu[r].eb(l, i);
	}
	root = new node(1, N);
	for (int i = 1; i <= N; i++) {
		for (auto j : del[i]) root->unset(j);
		for (auto j : add[i]) root->set(j);
		root->upd(max(1ll, i - B[i]), max(1ll, i - A[i]), H[i]);
		for (auto j : qu[i]) {
			out[j.second] = root->qry(j.first, i);
		}
		if (i + A[i] <= N) add[i + A[i]].pb(i);
		if (i + B[i] + 1 <= N) del[i + B[i] + 1].pb(i);
	}
	for (int i = 1; i <= Q; i++) cout << (out[i] == -1e16 ? -1 : out[i]) << '\n';
}

Compilation message

antennas.cpp:109:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  109 | main() {
      | ^~~~
# Verdict Execution time Memory Grader output
1 Incorrect 8 ms 14412 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 8 ms 14412 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 382 ms 59736 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 8 ms 14412 KB Output isn't correct
2 Halted 0 ms 0 KB -