Submission #1345508

#TimeUsernameProblemLanguageResultExecution timeMemory
1345508pyoroHappiness (Balkan15_HAPPINESS)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#include "happiness.h"
using namespace std;

#define ln "\n"
#define fast_cin() \
    ios_base::sync_with_stdio(false); \
    cin.tie(NULL)
#define iofiles() \
    freopen("input.in", "r", stdin); \
    freopen("output.out", "w", stdout)
#define dbg(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void __f(const char *name, Arg1 &&arg1) { cout << name << ": " << arg1 << endl; }
template <typename Arg1, typename... Args>
void __f(const char *names, Arg1 &&arg1, Args &&... args) {
    const char *comma = strchr(names + 1, ',');
    cout.write(names, comma - names) << ": " << arg1 << " |";
    __f(comma + 1, args...);
}

#define ll long long
#define int ll
#define ld long double
#define pb push_back

const ll INF = LLONG_MAX / 4;
const ld PI = acos(-1);
const int MOD = 1000000007;
const double eps = 1e-9;

struct Node {
	int sum=0, min=INF, mxp=0, ct=0, lc=-1, rc=-1;
};

struct Segtree {
	vector<Node> st;
	int n;
	
	Segtree(int _n) {
		n = _n;
		st.reserve(2e7);
		st.pb(Node());
	}
	
	void extend(int p, int type=3) {
		if (st[p].lc == -1 and (type & 1)) {
			st[p].lc = st.size();
			st.pb(Node());
		}
		if (st[p].rc == -1 and (type & 2)) {
			st[p].rc = st.size();
			st.pb(Node());
		}
	}
	
	void merge(Node& res) {
		Node a;
		Node b;
		int L = res.lc;
		int R = res.rc;
		
		a = (L == -1 ? Node():st[L]);
		b = (R == -1 ? Node():st[R]);
		
		res.sum = a.sum + b.sum;
		res.min = min(a.min, b.min);
		if (a.mxp == a.sum and (a.sum + 1 >= b.min or b.min == INF)) {
			res.mxp = res.sum;
		}
		else res.mxp = 0;
		
		// dbg(res.sum);
		// dbg(res.min);
		// dbg(res.mxp);
		// cout << ln;
	}
	
	void update(int p, int l, int r, int i, int j, int v) {
		if (l > j or r < i) return;
		if (l >= i and r <= j) {
			st[p].ct += v;
			if (!st[p].ct) {
				st[p].sum = 0;
				st[p].min = INF;
			}
			else {
				st[p].sum = st[p].ct * i;
				st[p].min = i;
			}
			
			if (i == 1) {
				st[p].mxp = 1;
			}
			else st[p].mxp = 0;

			// dbg(i, v);
			// dbg(st[p].sum);
			// dbg(st[p].min);
			// dbg(st[p].mxp);
			// dbg(st[p].ct);
			// cout << ln;
			
			return;
		}
		
		int m = (l + r) / 2;
		if (i <= m) {
			extend(p,1);
			update(st[p].lc, l, m, i, j, v);
		}
		if (j > m) {
			extend(p, 2);
			update(st[p].rc, m+1, r, i, j, v);
		}
		
		merge(st[p]);
	}
	
	int query() {
		return (st[0].mxp == st[0].sum);
	}
	
	void update(int i, int v) {
		update(0, 0, n - 1, i, i, v);
	}
};

Segtree st(1e12+10);

bool init(int coinsCount, long long maxCoinSize, long long coins[]) {
	for (int i = 0; i < coinsCount; i++) {
		st.update(coins[i], 1);
	}
	return st.query();
}
bool is_happy(int event, int coinsCount, long long coins[]) {
	for (int i = 0; i < coinsCount; i++) {
		st.update(coins[i], event);
	}
	return st.query();
}


// g++ A.cpp && ./a.out <input.in>output.out

Compilation message (stderr)

/usr/bin/ld: /tmp/ccKPPGxJ.o: in function `main':
grader.cpp:(.text.startup+0x9a): undefined reference to `init(int, long long, long long*)'
/usr/bin/ld: grader.cpp:(.text.startup+0x15b): undefined reference to `is_happy(int, int, long long*)'
collect2: error: ld returned 1 exit status