Submission #538354

#TimeUsernameProblemLanguageResultExecution timeMemory
538354fcwHappiness (Balkan15_HAPPINESS)C++17
100 / 100
401 ms16132 KiB
#include "happiness.h"
#include <bits/stdc++.h>
using namespace std;

using lint = long long;
multiset<lint>s[40];
lint sum[40];

void add(lint x, int b){
	int p = 0;
	while(1ll<<(p+1) <= x) p++;
	if(b == 1) s[p].insert(x), sum[p] += x;
	else s[p].erase(s[p].find(x)), sum[p] -= x;
}

bool ok(){
	lint cnt = 0;
	for(int i=0;i<40;i++){
		if(s[i].empty()) continue;
		lint x = *s[i].begin();
		if(cnt + 1 < x) return 0;
		if(s[i].size() > 1 && cnt + x + 1 < *next(s[i].begin())) return 0;
		cnt += sum[i];
	}
	return 1;
}

bool init(int coinsCount, lint maxCoinSize, lint coins[]) {
	for(int i=0;i<coinsCount;i++) add(coins[i], 1);
	return ok();
}

bool is_happy(int event, int coinsCount, lint coins[]){
	for(int i=0;i<coinsCount;i++){
		if(event == -1) add(coins[i], -1);
		else add(coins[i], 1);
	}
	return ok();
}

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...