Submission #318720

# Submission time Handle Problem Language Result Execution time Memory
318720 2020-11-03T03:07:46 Z aZvezda Triple Jump (JOI19_jumps) C++14
46 / 100
420 ms 230140 KB
#include <bits/stdc++.h>
using namespace std;
//#pragma GCC optimize ("O3")
//#pragma GCC target ("sse4")
#define endl "\n"
typedef long long ll;
template<class T, class T2> inline ostream &operator <<(ostream &out, const pair<T, T2> &x) { out << x.first << " " << x.second; return out;}
template<class T, class T2> inline istream &operator >>(istream &in, pair<T, T2> &x) { in >> x.first >> x.second; return in;}
template<class T, class T2> inline bool chkmax(T &x, const T2 &y) { return x < y ? x = y, 1 : 0; }
template<class T, class T2> inline bool chkmin(T &x, const T2 &y) { return x > y ? x = y, 1 : 0; }
const ll mod = 1e9 + 7;
#define out(x) "{" << (#x) << ": " << x << "} "

const ll MAX_N = 5e5 + 10;
ll arr[MAX_N], n;
vector<pair<ll, ll> > cand, toAdd[MAX_N], queries[MAX_N];
ll ans[MAX_N];

struct Node {
	ll val, valFull, lazy;
	Node() {val = valFull = lazy = -mod;}
	Node operator +(const Node &other) const {
		Node ret;
		ret.val = max(val, other.val);
		ret.valFull = max(valFull, other.valFull);
		return ret;
	}
};

struct SegTree {
	Node tree[4 * MAX_N];
	void push(ll curr, ll l, ll r) {
		chkmax(tree[curr].valFull, tree[curr].val + tree[curr].lazy);
		if(l != r) {
			chkmax(tree[curr * 2].lazy, tree[curr].lazy);
			chkmax(tree[curr * 2 + 1].lazy, tree[curr].lazy);
		}
		tree[curr].lazy = -mod;
	}
	void addToRoot(ll x) {
		chkmax(tree[1].lazy, x);
	}
	ll ans(ll curr, ll l, ll r, ll ql, ll qr) {
		push(curr, l, r);
		if(ql <= l && r <= qr) {
			return tree[curr].valFull;
		} else if(ql > r || qr < l) {
			return 0;
		}
		ll m = (l + r) / 2ll;
		return max(ans(curr * 2, l, m, ql, qr), ans(curr * 2 + 1, m + 1, r, ql, qr));
	}
	void upd(ll curr, ll l, ll r, ll ind, ll val) {
		push(curr, l, r);
		if(l == r && l == ind) {
			chkmax(tree[curr].val, val);
			return;
		} else if(r < ind || l > ind) {
			return;
		}
		ll m = (l + r) / 2ll;
		upd(curr * 2, l, m, ind, val);
		upd(curr * 2 + 1, m + 1, r, ind, val);
		tree[curr] = tree[curr * 2] + tree[curr * 2 + 1];
	}
};

SegTree seg;

signed main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	cin >> n;
	for(ll i = 0; i < n; i ++) {
		cin >> arr[i];
	}
	stack<ll> st;
	for(ll i = 0; i < n; i ++) {
		while(!st.empty() && arr[st.top()] < arr[i]) {
			st.pop();
		}
		if(!st.empty()) {
			cand.push_back({st.top(), i});
		}
		st.push(i);
	}
	while(!st.empty()) {st.pop();}
	for(ll i = n; i >= 0; i --) {
		while(!st.empty() && arr[st.top()] < arr[i]) {
			st.pop();
		}
		if(!st.empty()) {
			cand.push_back({i, st.top()});
		}
		st.push(i);
	}
	for(ll i = 0; i < n - 1; i ++) {
		cand.push_back({i, i + 1});
	}
	for(auto it : cand) {
		toAdd[it.second * 2 - it.first].push_back({arr[it.first] + arr[it.second], it.first});
	}
	
	ll q;
	cin >> q;
	for(ll i = 0; i < q; i ++) {
		ll l, r;
		cin >> l >> r;
		queries[r - 1].push_back({l - 1, i});
	}

	for(ll i = 0; i < n; i ++) {
		for(auto it : toAdd[i]) {
			seg.upd(1, 0, n - 1, it.second, it.first);
		}
		seg.addToRoot(arr[i]);
		for(auto it : queries[i]) {
			ans[it.second] = seg.ans(1, 0, n - 1, it.first, i);
		}
	}
	
	for(ll i = 0; i < q; i ++) {
		cout << ans[i] << endl;
	}
	return 0;
}

# Verdict Execution time Memory Grader output
1 Correct 44 ms 70884 KB Output is correct
2 Correct 44 ms 70756 KB Output is correct
3 Correct 44 ms 70884 KB Output is correct
4 Correct 44 ms 70764 KB Output is correct
5 Correct 44 ms 70756 KB Output is correct
6 Correct 44 ms 70756 KB Output is correct
7 Correct 45 ms 70756 KB Output is correct
8 Correct 44 ms 70796 KB Output is correct
9 Correct 45 ms 70904 KB Output is correct
10 Correct 43 ms 70756 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 44 ms 70884 KB Output is correct
2 Correct 44 ms 70756 KB Output is correct
3 Correct 44 ms 70884 KB Output is correct
4 Correct 44 ms 70764 KB Output is correct
5 Correct 44 ms 70756 KB Output is correct
6 Correct 44 ms 70756 KB Output is correct
7 Correct 45 ms 70756 KB Output is correct
8 Correct 44 ms 70796 KB Output is correct
9 Correct 45 ms 70904 KB Output is correct
10 Correct 43 ms 70756 KB Output is correct
11 Correct 420 ms 98664 KB Output is correct
12 Correct 403 ms 98320 KB Output is correct
13 Correct 420 ms 98212 KB Output is correct
14 Correct 413 ms 98532 KB Output is correct
15 Correct 413 ms 98536 KB Output is correct
16 Correct 414 ms 97896 KB Output is correct
17 Correct 413 ms 97892 KB Output is correct
18 Correct 413 ms 97768 KB Output is correct
19 Correct 410 ms 98536 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 353 ms 99372 KB Output is correct
2 Correct 248 ms 91528 KB Output is correct
3 Correct 233 ms 89868 KB Output is correct
4 Correct 355 ms 99252 KB Output is correct
5 Correct 354 ms 99244 KB Output is correct
6 Correct 348 ms 98608 KB Output is correct
7 Correct 347 ms 98608 KB Output is correct
8 Correct 344 ms 98480 KB Output is correct
9 Correct 352 ms 98736 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 44 ms 70884 KB Output is correct
2 Correct 44 ms 70756 KB Output is correct
3 Correct 44 ms 70884 KB Output is correct
4 Correct 44 ms 70764 KB Output is correct
5 Correct 44 ms 70756 KB Output is correct
6 Correct 44 ms 70756 KB Output is correct
7 Correct 45 ms 70756 KB Output is correct
8 Correct 44 ms 70796 KB Output is correct
9 Correct 45 ms 70904 KB Output is correct
10 Correct 43 ms 70756 KB Output is correct
11 Correct 420 ms 98664 KB Output is correct
12 Correct 403 ms 98320 KB Output is correct
13 Correct 420 ms 98212 KB Output is correct
14 Correct 413 ms 98532 KB Output is correct
15 Correct 413 ms 98536 KB Output is correct
16 Correct 414 ms 97896 KB Output is correct
17 Correct 413 ms 97892 KB Output is correct
18 Correct 413 ms 97768 KB Output is correct
19 Correct 410 ms 98536 KB Output is correct
20 Correct 353 ms 99372 KB Output is correct
21 Correct 248 ms 91528 KB Output is correct
22 Correct 233 ms 89868 KB Output is correct
23 Correct 355 ms 99252 KB Output is correct
24 Correct 354 ms 99244 KB Output is correct
25 Correct 348 ms 98608 KB Output is correct
26 Correct 347 ms 98608 KB Output is correct
27 Correct 344 ms 98480 KB Output is correct
28 Correct 352 ms 98736 KB Output is correct
29 Runtime error 326 ms 230140 KB Execution killed with signal 11 (could be triggered by violating memory limits)
30 Halted 0 ms 0 KB -