답안 #777118

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
777118 2023-07-08T17:09:08 Z PanosPask Happiness (Balkan15_HAPPINESS) C++14
60 / 100
783 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 + 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 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 4 ms 3412 KB Output is correct
8 Correct 29 ms 26452 KB Output is correct
9 Correct 28 ms 26640 KB Output is correct
10 Correct 26 ms 25692 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 258 ms 50348 KB Output is correct
7 Correct 236 ms 49812 KB Output is correct
8 Correct 245 ms 50364 KB Output is correct
9 Correct 407 ms 61876 KB Output is correct
10 Correct 424 ms 66360 KB Output is correct
11 Correct 136 ms 33244 KB Output is correct
12 Correct 143 ms 33276 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 4 ms 3412 KB Output is correct
8 Correct 29 ms 26452 KB Output is correct
9 Correct 28 ms 26640 KB Output is correct
10 Correct 26 ms 25692 KB Output is correct
11 Correct 258 ms 50348 KB Output is correct
12 Correct 236 ms 49812 KB Output is correct
13 Correct 245 ms 50364 KB Output is correct
14 Correct 407 ms 61876 KB Output is correct
15 Correct 424 ms 66360 KB Output is correct
16 Correct 136 ms 33244 KB Output is correct
17 Correct 143 ms 33276 KB Output is correct
18 Correct 772 ms 420008 KB Output is correct
19 Correct 736 ms 436984 KB Output is correct
20 Runtime error 783 ms 524288 KB Execution killed with signal 9
21 Halted 0 ms 0 KB -