Description





You've recently started an ice-cream business in a local school. During a day you have many suppliers delivering the ice-cream for you, and many students buying it from you. You are not allowed to set the prices, as you are told the price for each piece of
ice-cream by the suppliers. 



The day is described with a sequence of queries. Each query can be either

ARRIVE nc

, meaning that a supplier has delivered n pieces of ice-cream priced c each to you, or

BUY nt

, meaning that a student wants to buy n pieces of ice-cream, having a total of t money. The latter is processed as follows: in case n cheapest pieces of ice-cream you have cost no more than t (together), you sell those n cheapest
pieces to the student; in case they cost more, she gets nothing. You start the day with no ice-cream. 



For each student, output

HAPPY

if she gets her ice-cream, and

UNHAPPY

if she doesn't.

Input

The input file contains between 1 and 10 5 queries (inclusive), each on a separate line. The queries are formatted as described above, either

ARRIVE nc

or

BUY nt

, 1 ≤ nc ≤ 10 6, 1 ≤ t ≤ 10 12.

Output

For each

BUY

-query output one line, containing either the word

HAPPY

or the word

UNHAPPY

(answers should be in the same order as the corresponding queries).

Sample Input

sample input
sample output
ARRIVE 1 1
ARRIVE 10 200
BUY 5 900
BUY 5 900
BUY 5 1000
HAPPY
UNHAPPY
HAPPY

题意:一个商店,有两种操作:(1)ARRIVE n c表示进货n个,每一个c元。(2)BUY n t表示一个买货的人要买n个,一共拿了t元钱。假设如今店里的货的数量大于等于n且最廉价的n个的价格小于等于t则将最廉价的卖给他。否则不卖。

思路:离线的线段树,我们以价格作为结点,然后离散化,好久没做。看了final爷kuangbing的题解,注意的是优先处理最小的n个

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#define lson(x) (x<<1)
#define rson(x) ((x<<1)|1)
typedef long long ll;
using namespace std;
const int maxn = 100010; struct Node {
int l, r;
ll num;
ll sum;
int flag;
} segTree[maxn<<2];
int x[maxn]; void pushdown(int x) {
if (segTree[x].l == segTree[x].r)
return;
if (segTree[x].flag != -1) {
segTree[lson(x)].sum = segTree[rson(x)].sum = 0;
segTree[lson(x)].num = segTree[rson(x)].num = 0;
segTree[lson(x)].flag = segTree[rson(x)].flag = 0;
segTree[x].flag = -1;
}
} void pushup(int x) {
if (segTree[x].l == segTree[x].r)
return;
segTree[x].sum = segTree[lson(x)].sum + segTree[rson(x)].sum;
segTree[x].num = segTree[lson(x)].num + segTree[rson(x)].num;
} void build(int x, int l, int r) {
segTree[x].r = r;
segTree[x].l = l;
segTree[x].sum = segTree[x].num = 0;
segTree[x].flag = -1;
if (l == r) return;
int mid = l + r >> 1;
build(lson(x), l, mid);
build(rson(x), mid+1, r);
} void Add(int i, int c, int n) {
segTree[i].sum += (ll) c * n;
segTree[i].num += n;
if (x[segTree[i].l] == c && x[segTree[i].r] == c)
return;
pushdown(i); if (c <= x[segTree[lson(i)].r])
Add(lson(i), c, n);
else Add(rson(i), c, n);
} ll query(int i, int n) {
if (segTree[i].l == segTree[i].r) {
return (ll) n * x[segTree[i].l];
}
pushdown(i);
if (segTree[lson(i)].num >= n)
return query(lson(i), n);
else return segTree[lson(i)].sum + query(rson(i), n-segTree[lson(i)].num);
} void clear(int i, int n) {
if (segTree[i].l == segTree[i].r) {
segTree[i].num -= n;
segTree[i].sum = segTree[i].num * x[segTree[i].l];
return;
} pushdown(i);
if (segTree[lson(i)].num >= n)
clear(lson(i), n);
else {
clear(rson(i), n-segTree[lson(i)].num);
segTree[lson(i)].num = segTree[lson(i)].sum = 0;
segTree[lson(i)].flag = 0;
}
pushup(i);
} struct Query {
char op[10];
int n;
ll c;
} q[maxn]; int main() {
int n = 0;
int tot = 0;
while (scanf("%s%d%lld", q[n].op, &q[n].n, &q[n].c) != EOF) {
if (q[n].op[0] == 'A')
x[tot++] = q[n].c;
n++;
}
sort(x, x+tot);
tot = unique(x, x+tot) - x;
build(1, 0, tot-1); for (int i = 0; i < n; i++) {
if (q[i].op[0] == 'A')
Add(1, q[i].c, q[i].n);
else {
if (segTree[1].num < q[i].n)
printf("UNHAPPY\n");
else {
if (query(1, q[i].n) > q[i].c)
printf("UNHAPPY\n");
else {
printf("HAPPY\n");
clear(1, q[i].n);
}
}
}
}
return 0;
}

SGU - 311 Ice-cream Tycoon(线段树)的更多相关文章

  1. SGU 531. Bonnie and Clyde 线段树

    531. Bonnie and Clyde 题目连接: http://acm.sgu.ru/problem.php?contest=0&problem=531 Description Bonn ...

  2. SGU 319 Kalevich Strikes Back(线段树扫描线)

    题目大意: n个矩形,将一个大矩形分成 n+1 块.矩形之间不重合,可是包括.求这n+1个矩形的面积 思路分析: 用线段树记录他们之间的父子关系.然后dfs 计算面积. 当给出的矩形上边的时候,就要记 ...

  3. Sonya and Ice Cream CodeForces - 1004E 树的直径, 贪心

    题目链接 set维护最小值贪心, 刚开始用树的直径+单调队列没调出来... #include <iostream>#include <cstdio> #include < ...

  4. 【BZOJ-3252】攻略 DFS序 + 线段树 + 贪心

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 339  Solved: 130[Submit][Status][Discuss] D ...

  5. bzoj3252攻略(线段树+dfs序)

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 562  Solved: 238[Submit][Status][Discuss] D ...

  6. SGU 311. Ice-cream Tycoon(线段树)

    311. Ice-cream Tycoon Time limit per test: 0.5 second(s)Memory limit: 65536 kilobytes input: standar ...

  7. SGU 180 Inversions(离散化 + 线段树求逆序对)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=180 解题报告:一个裸的求逆序对的题,离散化+线段树,也可以用离散化+树状数组.因为 ...

  8. SGU 319. Kalevich Strikes Back (线段树)

    319. Kalevich Strikes Back Time limit per test: 0.5 second(s)Memory limit: 65536 kilobytes input: st ...

  9. bzoj千题计划311:bzoj5017: [Snoi2017]炸弹(线段树优化tarjan构图)

    https://www.lydsy.com/JudgeOnline/problem.php?id=5017 暴力: 对于每一个炸弹,枚举所有的炸弹,看它爆炸能不能引爆那个炸弹 如果能,由这个炸弹向引爆 ...

随机推荐

  1. Linux之常用Shell脚本总结

    一.简介本文将总结一些常用的shell脚本,方便以后工作中使用. 二.shell脚本[a]定期备份mysql数据库,需结合cronb定时任务调度实现. #!/bin/bash#首先声明一些自定义变量 ...

  2. vscode 中文设置

    修改设置 语言设置介绍: https://code.visualstudio.com/docs/getstarted/locales 按Ctrl + Shift + P打开命令调色板,然后开始键入“d ...

  3. 用户管理命令--passwd,usermod,userdel

    用户修改密码命令--passwd 当修改用户的密码时,也要分普通用户和超级用户两种情况 普通用户:修改密码前需要先输入当前密码,确认是否正确 密码设置不可以过于简单 超级用户:权利非常的大,可以设置任 ...

  4. python基础知识11-文件操作

    文件 装饰器,装饰函数或者类的方法. 1.文件的基本操作 打开文件: 注意绝对路径与相对路径. path = 'text.txt' path = r'/home/pyvip/py_case/text. ...

  5. 杭电 5326 Work (并查集求子结点为k的结点数)

    Description It’s an interesting experience to move from ICPC to work, end my college life and start ...

  6. manjaro xfce 18.0 踩坑记录

    manjaro xfce 18.0 踩坑记录 1 简介1.1 Manjaro Linux1.2 开发桌面环境2 自动打开 NumLock3 系统快照3.1 安装timeshift3.2 使用times ...

  7. BeautifulSoup4系列一

    前言 以博客园为例,爬取我的博客上首页的发布时间.标题.摘要,本篇先小试牛刀,先了解下它的强大之处,后面讲beautifulsoup4的详细功能. 一.安装 1.打开cmd用pip在线安装beauti ...

  8. PTA 01-复杂度1 最大子列和问题 (20分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/709 5-1 最大子列和问题   (20分) 给定KK个整数组成的序列{ N_1N​1​ ...

  9. [Kubernetes]集群配置免密登录Permission denied (publickey,password) 解决办法

    在用ansible部署Kubernetes集群是需要配置免密登录,但是遇到Permission denied (publickey,password)的问题 首先推断可能是sshd_config的配置 ...

  10. 亲历dataguard的一些经验问答题

    问题1:是否log_archive_dest_n=service中进程使用lgwr时(如log_archive_dest_2='service=DBSTD LGWR SYNC'),备库就一定要建立st ...