「CodePlus 2017 12 月赛」火锅盛宴(模拟+树状数组)
1A,拿来练手的好题
用一个优先队列按煮熟时间从小到大排序,被煮熟了就弹出来。
用n个vector维护每种食物的煮熟时间,显然是有序的。
用树状数组维护每种煮熟食物的数量。
每次操作前把优先队列里煮熟时间<=当前时间的弹出,BIT上+1。
每次0操作把食物塞进优先队列和vector
每次1操作先看看树状数组里有没有数,没有输出angry,有的话在树状数组上二分找到最小的数。
每次2操作先看看树状数组里有没有这一种数,有的话输出并-1,没有的话看看vector有没有,有的话输出时间差,没有的话输出angry。
没了,写得行云流水。
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<queue>
#include<vector>
#define ll long long
using namespace std;
const int maxn=;
struct poi{int pos, tim;};
priority_queue<poi>q;
bool operator<(poi a, poi b){return a.tim>b.tim;}
int n, Q, mx, t, ty, x, l, r, T;
int tree[<<], fir[maxn], s[maxn];
vector<int>v[maxn];
inline void read(int &k)
{
int f=; k=; char c=getchar();
while(c<'' || c>'') c=='-' && (f=-), c=getchar();
while(c<='' && c>='') k=k*+c-'', c=getchar();
k*=f;
}
inline void add(int x, int delta){for(;x<=mx;x+=x&-x) tree[x]+=delta;}
inline int query(int x){int sum=; for(;x;x-=x&-x) sum+=tree[x]; return sum;}
inline void yazid()
{
if(!tree[mx]) {puts("Yazid is angry."); return;}
int l=, r=mx, k=;
while(l<r)
{
int mid=(l+r)>>;
if(tree[mid]>=k) r=mid;
else k-=tree[mid], l=mid+;
}
add(l, -); printf("%d\n", l);
return;
}
inline void yjqqaq(int t, int id)
{
if(query(id)-query(id-)) {puts("Succeeded!"); add(id, -); return;}
if(v[id].size()==fir[id]) {puts("YJQQQAQ is angry."); return;}
printf("%d\n", v[id][fir[id]]-t); return;
}
inline void clear()
{
memset(tree, , (mx+)<<);
memset(fir, , (n+)<<);
while(!q.empty()) q.pop();
for(int i=;i<=n;i++) v[i].clear();
}
int main()
{
read(T);
while(T--)
{
read(n); mx=; while(mx<=n) mx<<=; clear();
for(int i=;i<=n;i++) read(s[i]);
read(Q);
for(int i=;i<=Q;i++)
{
read(t); read(ty);
while(!q.empty())
{
poi now=q.top();
if(now.tim<=t) q.pop(), add(now.pos, ), fir[now.pos]++;
else break;
}
if(!ty) read(x), q.push((poi){x, t+s[x]}), v[x].push_back(t+s[x]);
else if(ty==) yazid();
else if(ty==) read(x), yjqqaq(t, x);
else read(l), read(r), printf("%d\n", query(r)-query(l-));
}
}
}
「CodePlus 2017 12 月赛」火锅盛宴(模拟+树状数组)的更多相关文章
- 「CodePlus 2017 12 月赛」火锅盛宴
n<=100000种食物,给每个食物煮熟时间,有q<=500000个操作:在某时刻插入某个食物:查询熟食中编号最小的并删除之:查询是否有编号为id的食物,如果有查询是否有编号为id的熟食, ...
- [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞
[LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞 试题描述 到河北省 见斯大林 / 在月光下 你的背影 / 让我们一起跳舞吧 うそだよ~ 河北省怎么可能有 Stalin. ...
- 「CodePlus 2017 12 月赛」可做题2(矩阵快速幂+exgcd+二分)
昨天这题死活调不出来结果是一个地方没取模,凉凉. 首先有个一眼就能看出来的规律... 斐波那契数列满足$a_1, a_2, a_1+a_2, a_1+2a_2, 2a_1+3a_2, 3a_1+5a_ ...
- 【LibreOJ】#6259. 「CodePlus 2017 12 月赛」白金元首与独舞
[题目]给定n行m列的矩阵,每个位置有一个指示方向(上下左右)或没有指示方向(任意选择),要求给未定格(没有指示方向的位置)确定方向,使得从任意一个开始走都可以都出矩阵,求方案数.n,m<=20 ...
- 【LIbreOJ】#6256. 「CodePlus 2017 12 月赛」可做题1
[题意]定义一个n阶正方形矩阵为“巧妙的”当且仅当:任意选择其中n个不同行列的数字之和相同. 给定n*m的矩阵,T次询问以(x,y)为左上角的k阶矩阵是否巧妙.n,m<=500,T<=10 ...
- 【LibreOJ】#6257. 「CodePlus 2017 12 月赛」可做题2
[题意]数列满足an=an-1+an-2,n>=3.现在a1=i,a2=[l,r],要求满足ak%p=m的整数a2有多少个.10^18. [算法]数论(扩欧)+矩阵快速幂 [题解]定义fib(i ...
- 「CodePlus 2017 12 月赛」白金元首与独舞
description 题面 data range \[ 1 \leq T \leq 10, 1 \leq n, m \leq 200 , 0 \leq k \leq \min(nm, 300)\] ...
- 走进矩阵树定理--「CodePlus 2017 12 月赛」白金元首与独舞
n,m<=200,n*m的方阵,有ULRD表示在这个格子时下一步要走到哪里,有一些待决策的格子用.表示,可以填ULRD任意一个,问有多少种填法使得从每个格子出发都能走出这个方阵,答案取模.保证未 ...
- loj6259「CodePlus 2017 12 月赛」白金元首与独舞
分析 我们将没连的点连向周围四个点 其余的按照给定的方向连 我们将所有连出去的位置统一连到0点上 再以0作为树根 于是就将问题转化为了有向图内向树计数 代码 #include<iostream& ...
随机推荐
- Redis源码阅读(六)集群-故障迁移(下)
Redis源码阅读(六)集群-故障迁移(下) 最近私人的事情比较多,没有抽出时间来整理博客.书接上文,上一篇里总结了Redis故障迁移的几个关键点,以及Redis中故障检测的实现.本篇主要介绍集群检测 ...
- AutoResetEvent 方法名称设计缺陷
这个类和方法,让人乍一读是读不明白的.不能通过方法名称明白其含义.所以它的方法名称设计是欠考虑. 应该类似于这样: public static class MyAutoResetEvent { pub ...
- Linux下oracle启动/关闭监听(bash:lsnrctl:command not found)
打开终端 切换帐户 # su - Oracle 启动监听 $ lsnrctl start 关闭监听 $ lsnrctl stop 切换帐户一定要加 "-" 否则会出现: bas ...
- 2018年第九届蓝桥杯【C++省赛B组】
2标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛.16点阵的字库把每个汉字看成是16x16个像素信息.并把这些信息记录在字节中. 一个字节可以存储8位信息,用32个字节就 ...
- 2017-2018-2学期 20172324《Java程序设计》第六周学习总结
20172324<Java程序设计>第六周学习总结 教材学习内容总结 如何创建数组以及int[] X与int X[]的区别(编译时是没有差别的,只是前者与其他类型的声明方式有一致性) 每一 ...
- Servlet以流的形式返回图片
代码: import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import ...
- Software-Defined Networking A Comprehensive Survey(一)
传统网络:1 复杂,难于管理 2 很难实现根据之前定义的方案进行配置,3 对于缺陷.变化不能够再次进行配置 4 控制和数据平面绑定在一起,使许多缺陷难于解决 SDN网络:通过打破传统网络垂直整合,从底 ...
- 【流程图】购物车、三级菜单、sed替换
- grep文本处理工具
grep是一款文本过滤工具,基于正则表达式进行模式匹配sed:stream editor 流编辑器awk:linux上实现为gawk,文本报告生成器(格式化文本)文本搜索工具,根据用户指定的模式,对目 ...
- PAT 甲级 1113 Integer Set Partition
https://pintia.cn/problem-sets/994805342720868352/problems/994805357258326016 Given a set of N (> ...