Submission #134723

#TimeUsernameProblemLanguageResultExecution timeMemory
134723someone_aaDivide and conquer (IZhO14_divide)C++17
100 / 100
360 ms73976 KiB
#include <bits/stdc++.h>
#define ll long long 
#define pb push_back
#define mp make_pair
using namespace std;
const int maxn = 100100;
ll gold[maxn], energy[maxn], x[maxn], n;
ll prefix_g[maxn], prefix_e[maxn];

class node {
public:
	ll lb, rb;
	ll value;
	node *lchild, *rchild;

	node(ll _lb, ll _rb) {
		lb = _lb;
		rb = _rb;
		value = LLONG_MAX;
		lchild = rchild = NULL;
	}
	ll get_val(node *x) {
		if(x == NULL) return LLONG_MAX;
		else return x->value;
	}
	void update(ll x, ll val) {
		if(lb == rb) {
			value = min(value, val);
		}
		else {
			ll mid = lb + (rb - lb) / 2;

			if(x <= mid) {
				if(lchild == NULL) lchild = new node(lb, mid);
				lchild -> update(x, val);
			}
			else {
				if(rchild == NULL) rchild = new node(mid+1, rb);
				rchild -> update(x, val);
			}
			
			value = min(get_val(lchild), get_val(rchild));
		}
	}
	ll query(ll ql, ll qr) {
		if(lb > qr || rb < ql) return LLONG_MAX;
		else if(lb >= ql && rb <= qr) return value;
		else {
			ll mid = lb + (rb - lb) / 2;

			ll l_val = LLONG_MAX;
			if(lchild != NULL) l_val = lchild -> query(ql, qr);

			ll r_val = LLONG_MAX;
			if(rchild != NULL) r_val = rchild -> query(ql, qr);

			return min(l_val, r_val);
		}
	}
};

int main() {
	cin>>n;
	for(int i=1;i<=n;i++) {
		cin>>x[i]>>gold[i]>>energy[i];

		prefix_g[i] = prefix_g[i-1] + gold[i];
		prefix_e[i] = prefix_e[i-1] + energy[i];
	}

	node *root = new node(1LL*INT_MIN, 1LL*INT_MAX);

	ll result = 0LL;
	for(int i=1;i<=n;i++) {

		root->update(x[i] - prefix_e[i-1], prefix_g[i-1]);	
		result = max(result, prefix_g[i] - root->query(x[i] - prefix_e[i], INT_MAX));
	}
	cout<<result<<"\n";
}

Compilation message (stderr)

divide.cpp: In member function 'long long int node::query(long long int, long long int)':
divide.cpp:49:7: warning: unused variable 'mid' [-Wunused-variable]
    ll mid = lb + (rb - lb) / 2;
       ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...