답안 #777117

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
777117 2023-07-08T17:00:51 Z PanosPask Happiness (Balkan15_HAPPINESS) C++14
60 / 100
790 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) {
			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;
	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 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 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 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 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 3540 KB Output is correct
8 Correct 36 ms 26572 KB Output is correct
9 Correct 30 ms 26828 KB Output is correct
10 Correct 26 ms 25932 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 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 237 ms 51484 KB Output is correct
7 Correct 231 ms 50892 KB Output is correct
8 Correct 240 ms 51436 KB Output is correct
9 Correct 420 ms 63084 KB Output is correct
10 Correct 432 ms 67460 KB Output is correct
11 Correct 145 ms 34496 KB Output is correct
12 Correct 141 ms 34496 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 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 3540 KB Output is correct
8 Correct 36 ms 26572 KB Output is correct
9 Correct 30 ms 26828 KB Output is correct
10 Correct 26 ms 25932 KB Output is correct
11 Correct 237 ms 51484 KB Output is correct
12 Correct 231 ms 50892 KB Output is correct
13 Correct 240 ms 51436 KB Output is correct
14 Correct 420 ms 63084 KB Output is correct
15 Correct 432 ms 67460 KB Output is correct
16 Correct 145 ms 34496 KB Output is correct
17 Correct 141 ms 34496 KB Output is correct
18 Correct 729 ms 420584 KB Output is correct
19 Correct 759 ms 437432 KB Output is correct
20 Runtime error 790 ms 524288 KB Execution killed with signal 9
21 Halted 0 ms 0 KB -