Pagini recente » Cod sursa (job #562150) | Cod sursa (job #2088564) | Cod sursa (job #797481) | Cod sursa (job #1656148) | Cod sursa (job #3210141)
#include <bits/stdc++.h>
#define L 1000005
//#define MAX_PRICE 1000001
//#define lsb(x) (x & (-x))
using namespace std;
//long long aib1[L], aib2[L];
priority_queue <pair <long long, long long>> pq;
vector <pair <int, int>> sold;
/*
void update1(long long pos, long long val) {
for (; pos <= MAX_PRICE; pos += lsb(pos))
aib1[pos] += val;
}
void update2(long long pos, long long val) {
for (; pos <= MAX_PRICE; pos += lsb(pos))
aib2[pos] += val;
}
*/
int main() {
string str;
while (cin >> str) {
long long n, p;
cin >> n >> p;
if (str[0] == 'A') {
//update1(p, n);
//update2(p, n * p);
pq.push({-p, n});
}
else {
/*while (!pq.empty()) {
cout << -pq.top().first << " " << pq.top().second << "\n";
pq.pop();
}
cout << "\n";*/
long long s = 0, val = 0;
bool ok = true;
sold.clear();
while (true) {
if (pq.empty()) {
ok = false;
break;
}
long long topPrice = -pq.top().first, quant = 0;
while (!pq.empty() && -pq.top().first == topPrice) {
quant += pq.top().second;
pq.pop();
}
sold.push_back({-topPrice, quant});
if (s + quant < n) {
s += quant;
val += topPrice * quant;
}
else
break;
}
//cout << "! " << n - s << " " << -sold.back().first << " !\n";
if (ok && val + (n - s) * (-sold.back().first) <= p) {
pq.push({sold.back().first, sold.back().second - (n - s)});
//cout << "!!! " << sold.back().first << " " << sold.back().second - (n - s) << " !!!\n";
cout << "HAPPY\n";
}
else {
for (auto it : sold)
pq.push(it);
cout << "UNHAPPY\n";
}
//cout << "\n\n\n\n\n";
}
}
return 0;
}