「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& ...
随机推荐
- 傻瓜式搭建私有云就用这两组合:宝塔+kodexplorer
介绍 宝塔面板:是一款linux/windows平台均可使用的服务器管理软件,自带环境包,主要基于centos操作系统,可一键包装nginx.apache.php.mysql.pureftpd.php ...
- 三羊献瑞:dfs / next_permutation()
三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉 + 三 羊 献 瑞------------------- 三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的汉字代 ...
- pytorch 如何使用tensorboard实时查看曲线---- tensorboardX简介
用惯了tensorflow的小伙伴肯定都用过tensorboard工具吧.虽然Facebook也推出了visdom,但是在一次不小心误触clear之后,我放弃了这个工具(页面的一个clear按钮我本来 ...
- Django FBV/CBV、中间件、GIT使用
s5day82 内容回顾: 1. Http请求本质 Django程序:socket服务端 a. 服务端监听IP和端口 c. 接受请求 \r\n\r\n:请求头和请求体 \r\n & reque ...
- 精通Python爬虫-03-狩猎大师
声明: 本系列文章原创于慕课网,作者秋名山车神,任何人不得以任何形式在不经作者允许的情况下,进行任何形式的印刷以及销售,转载需注明出处及此声明. 本系列文章更新至少每周一更,将涉及Python爬虫基础 ...
- Django_事务
介绍 函数说明 from django.db import transaction transaction.atomic # 原子性操作,把一系列操作当做一个整体,错了则集体回退 transactio ...
- Django_rest_framework_版本(待验证)
简介 API版本控制可以用来在不同的客户端使用不同的行为.REST框架提供了大量不同的版本设计. 版本控制是由传入的客户端请求决定的,并且可能基于请求URL,或者基于请求头. 有许多有效的方法达到版本 ...
- Eclipse各版本分析比较
Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会. Ec ...
- Task 9 从用户界面和体验分析“360极速浏览器”
我目前使用的浏览器是360极速浏览器,下面将针对用户界面.记住用户选择.短期刺激.长期使用的好处坏处.不要让用户犯简单的错误四个方面对其进行评估: 1.用户界面: 01 可视性原则--网络没有连接或者 ...
- Task 4.4二维环形数组求最大子矩阵之和
任务: (1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组首尾相接,象个一条首尾相接带子一样. (3)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (4)求所有子数 ...