Submission #1208649

#TimeUsernameProblemLanguageResultExecution timeMemory
1208649phungmanager0Happiness (Balkan15_HAPPINESS)C++20
100 / 100
195 ms10012 KiB
#include "happiness.h"
#include <bits/stdc++.h>
using namespace std;
multiset<long long> s[41];
long long sum[41];
void update(long long x, bool del) {
    int k = 63 - __builtin_clzll(x);
    if(del) {
        auto it = s[k].find(x);
        if(it != s[k].end()) {
            s[k].erase(it);
            sum[k] -= x;
        }
    } else {
        s[k].insert(x);
        sum[k] += x;
    }
}
bool get() {
    long long tmp = 0;
    for(int i = 0; i < 41; i++) {
        if(s[i].size()) {
            auto it = s[i].begin();
            if(*it <= tmp + 1) {
                if(s[i].size() > 1) {
                    auto nextValue = next(it);
                    if(tmp + *it + 1 < *nextValue) return 0;
                    else tmp += sum[i]; 
                } else tmp += sum[i];
            } else return false;
        }
    }
    return true;
}
bool is_happy(int event, int coinsCount, long long coins[]) {
    for(int i = 0; i < coinsCount; i++) {
        if(event == -1) update(coins[i], true);
        else update(coins[i], false);
    }
    return get();
}

bool init(int coinsCount, long long maxCoinSize, long long coins[]) {
    for(int i = 0; i < coinsCount; i++) update(coins[i], false);
    return get();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...