Submission #925159

#TimeUsernameProblemLanguageResultExecution timeMemory
925159myst6Happiness (Balkan15_HAPPINESS)C++14
100 / 100
884 ms256500 KiB
#include "happiness.h"
#include <bits/stdc++.h>
 
using namespace std;
using ll = long long;
 
struct Node {
	ll sum;
	Node *left, *right;
	Node() : sum(0), left(nullptr), right(nullptr) {}
	void update(ll v, ll xl, ll xr, ll delta) {
		sum += delta;
		if (xl == xr) return;
		ll xm = (xl + xr) / 2;
		if (v <= xm) {
			if (!left) left = new Node();
			left->update(v, xl, xm, delta);
		} else {
			if (!right) right = new Node();
			right->update(v, xm+1, xr, delta);
		}
	}
	ll query(ll l, ll r, ll xl, ll xr) {
		if (l > r) return 0;
		if (l == xl && r == xr) {
			return sum;
		} else {
			ll xm = (xl + xr) / 2;
			ll ans = 0;
			if (left) ans += left->query(l, min(r, xm), xl, xm);
			if (right) ans += right->query(max(l, xm+1), r, xm+1, xr);
			return ans;
		}
	}
} tree;
 
const ll hi = 1'000'000'000'005LL;
 
void add(ll coin) {
	tree.update(coin, 1, hi, +coin);
}
 
void remove(ll coin) {
	tree.update(coin, 1, hi, -coin);
}
 
bool check() {
	ll curr = 1;
	while (curr < min(hi, tree.sum)) {
		ll sum = tree.query(1, curr, 1, hi);
		if (sum < curr) return false;
		curr = sum + 1;
	}
	return true;
}
 
bool init(int coinsCount, ll maxCoinSize, ll coins[]) {
	for (int i=0; i<coinsCount; i++) add(coins[i]);
	return check();
}
 
bool is_happy(int event, int coinsCount, ll coins[]) {
	for (int i=0; i<coinsCount; i++) 
		if (event == 1) add(coins[i]);
		else remove(coins[i]);
	return check();
}

Compilation message (stderr)

grader.cpp: In function 'int main()':
grader.cpp:16:12: warning: unused variable 'max_code' [-Wunused-variable]
   16 |  long long max_code;
      |            ^~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...