답안 #777119

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
777119 2023-07-08T17:11:26 Z PanosPask Happiness (Balkan15_HAPPINESS) C++14
60 / 100
802 ms 524288 KB
#include "happiness.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

typedef pair<ll, ll> pl;

struct SegTree {
	const ll NO_OP = 0;
	struct Node {
		// v is min(a[i] - i) for all i in node
		ll sum;
		ll min;

		Node *l, *r;

		Node(ll a, ll b, Node* c, Node* d) : sum(a), min(b), l(c), r(d) {};
	};
	Node* null;
	const pl NEUTRAL = {0, 0};

	ll size;
	Node* root;
	void init(ll n) {
		size = 1;
		while (size < n)
			size *= 2;

		null = new Node(0, 0, nullptr, nullptr);
		null->l = null->r = null;
		root = new Node(0, -size + 1, null, null);
	}

	void modify(ll i, ll v, Node* x, ll lx, ll rx) {
		if (lx == rx - 1) {
			assert(x != null);
			x->sum += v * i;
			x->min += v * i;

			return;
		}

		ll mid = (lx + rx) / 2;
		if (x->l == null) {
			x->l = new Node(0, -mid + 1, null, null);
		}
		if (x->r == null) {
			x->r = new Node(0, -rx + 1, null, null);
		}

		if (i < mid)
			modify(i, v, x->l, lx, mid);
		else
			modify(i, v, x->r, mid, rx);

		x->sum = x->l->sum + x->r->sum;
		x->min = min(x->l->min, x->l->sum + x->r->min);

		return;
	}
	void modify(ll i, ll v) {
		modify(i, v, root, 0, size);
	}

	pl calc(ll l, ll r, Node* x, ll lx, ll rx) {
		if (l >= rx || lx >= r) {
			return NEUTRAL;
		}
		if (x == null) {
			return {0, -min(r, rx)};
		}
		else if (l <= lx && rx <= r) {
			return {x->sum, x->min};
		}

		ll mid = (lx + rx) / 2;
		pl p1 = calc(l, r, x->l, lx, mid);
		pl p2 = calc(l, r, x->r, mid, rx);

		return {p1.first + p2.first, min(p1.second, p1.first + p2.second)};
	}
	ll calc(ll l, ll r) {
		pl v = calc(l, r, root, 0, size);
		// cerr << v.first << endl;
		return v.second;
	}
};

SegTree st;
ll M;
ll cursum = 0;

int checkgood(void)
{
	ll v = st.calc(0, min(M, cursum));
	// fprintf(stderr, "The minimum is %lld\n", v);
	return v >= 0;
}

bool init(int coinsCount, long long maxCoinSize, long long coins[]) {
	M = maxCoinSize + 1;
	st.init(M);

	sort(coins, coins + coinsCount);

	for (int i = 0; i < coinsCount; i++) {
		st.modify(coins[i], 1);
		cursum += coins[i];
	}

	return checkgood();
}

bool is_happy(int event, int coinsCount, long long coins[]) {
	for (int i = 0; i < coinsCount; i++) {
		st.modify(coins[i], event);
		cursum += coins[i] * event;
	}

	return checkgood();
}

Compilation message

grader.cpp: In function 'int main()':
grader.cpp:16:12: warning: unused variable 'max_code' [-Wunused-variable]
   16 |  long long max_code;
      |            ^~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 3 ms 3156 KB Output is correct
7 Correct 3 ms 3412 KB Output is correct
8 Correct 27 ms 26456 KB Output is correct
9 Correct 30 ms 26716 KB Output is correct
10 Correct 26 ms 25700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 234 ms 50296 KB Output is correct
7 Correct 242 ms 49832 KB Output is correct
8 Correct 238 ms 50396 KB Output is correct
9 Correct 415 ms 61868 KB Output is correct
10 Correct 458 ms 66264 KB Output is correct
11 Correct 135 ms 33268 KB Output is correct
12 Correct 143 ms 33316 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 3 ms 3156 KB Output is correct
7 Correct 3 ms 3412 KB Output is correct
8 Correct 27 ms 26456 KB Output is correct
9 Correct 30 ms 26716 KB Output is correct
10 Correct 26 ms 25700 KB Output is correct
11 Correct 234 ms 50296 KB Output is correct
12 Correct 242 ms 49832 KB Output is correct
13 Correct 238 ms 50396 KB Output is correct
14 Correct 415 ms 61868 KB Output is correct
15 Correct 458 ms 66264 KB Output is correct
16 Correct 135 ms 33268 KB Output is correct
17 Correct 143 ms 33316 KB Output is correct
18 Correct 702 ms 419820 KB Output is correct
19 Correct 762 ms 436764 KB Output is correct
20 Runtime error 802 ms 524288 KB Execution killed with signal 9
21 Halted 0 ms 0 KB -