FZU 1894 志愿者选拔 (单调队列)
/******************************************************************
题目: 志愿者选拔(FZU 1894)
算法: 单调队列
算法思想: 在每个元素入队的时候入队的时候,使队列单调,查找
的时候就能很快找到最值。
*******************************************************************/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std; const int mx=;
struct Q
{
int x,di;
};
Q q[mx];
char s[]; int main()
{
int t;
scanf("%d",&t);
while (t--)
{
int h=,r=-; ///h为对头,r为队尾
int cut=,id=; ///cut为删除数的个数,id为插入数的下标。
scanf("%s",s);
while (~scanf("%s",s))
{
if (s[]=='E') break;
if (s[]=='G') cut++;
if (s[]=='Q')
{
if (cut>=id) printf("-1\n"); ///删除数个数大于等于最大数id,队列为空
else
{
while (q[h].di<=cut) h++; ///由于队列是单调的,所以只要找到第一个没
///有被删除数就是最大数,只要一个数的id大于
///删除数的个数,那么这个数就没有被删除
printf("%d\n",q[h].x);
}
}
if (s[]=='C')
{
int x;
scanf("%s%d",s,&x);
while (r>=h&&q[r].x<x) ///找到这个数要插入的为,使队列从头到尾是单调
///的,这样做虽然会覆盖一些数,但是覆盖的数已
///经不会再输出了。
{
r--;
}
q[++r].x=x;
q[r].di=++id;
}
}
}
}
FZU 1894 志愿者选拔 (单调队列)的更多相关文章
- FZU 1894 志愿者选拔 单调队列
训练赛的题…… 暴力一波明显超时…… 最近刚学stl 感觉是优先队列 但还是太会用…… 以后可以试一下优先队列…… 比赛之后百度了一下 发现是单调队列…… 看起来挺简单的 也算个模版题吧…… 总之思路 ...
- FZU 1894 志愿者选拔【单调队列】【monotone decreasing queue】
Problem 1894 志愿者选拔 Accept: 1770 Submit: 5523 Time Limit: 1500 mSec Memory Limit : 32768 KB P ...
- FZU 1894 志愿者选拔
Problem 1894 志愿者选拔 Accept: 2308 Submit: 7003 Time Limit: 1500 mSec Memory Limit : 32768 KB Problem D ...
- FZU 1894 志愿者选拔(单调队列)
传送门 Description 世博会马上就要开幕了,福州大学组织了一次志愿者选拔活动.参加志愿者选拔的同学们排队接受面试官们的面试.参加面试的同学们按照先来先面试并且先结束的原则接受面试官们的考查. ...
- FZU1894 志愿者选拔 --单调队列
做法:维护一个单调递减序列,只需输出序列中的第一个元素即可. 对于命令我们可以进行不同的处理: 如果是Q命令,则判断当前队列中是否仍有元素,如果没有则输出-1,如果有则直接输出队首. 如果是G命令,则 ...
- FZU 1894 志愿者选拔(优化循环)
我并没有多想,他们是用的数组模拟队列,然而我就是优化循环次数过得 #include<iostream> #include<cstdio> #include<cstring ...
- 暑期训练狂刷系列——Foj 1894 志愿者选拔 (单调队列)
题目连接: http://acm.fzu.edu.cn/problem.php?pid=1894 解题思路: 因为出队和入队都满足队列的性质,优先单调队列的优先级有进入队列的顺序和人品的高低,在一段区 ...
- FZU 1894 (双端队列)
Problem 1894 志愿者选拔 Accept: 1166 Submit: 3683 Time Limit: 1500 mSec Memory Limit : 32768 KB Pr ...
- FZU_1894 志愿者选拔 【单调队列】
1 题面 FZU1894 2 分析 单调队列的典型引用 需要注意的是在用维护辅助队列的时候,$L$和$R$的初始化都是0时,队列第一个数就是$L$,最后一个数就是$R-1$. 3 AC代码 #incl ...
随机推荐
- BufferedReader需要显示关闭
BufferedReader reader = new BufferedReader(); …… reader.close(); BufferedReader需要显示关闭 解释: 方法调用结束后,这两 ...
- git 新建分支/切换分支/合并分支 使用方法
我的源码在 阿里云的git上存储着呢 1. 在 code.aliyun.com 上 新建分支 fixbug 2. 通过在 phpstorm中 右键项目>>VSC>>Git&g ...
- 【xargs使用】查询包含某字符串的所有文件
在initrd目录下,查找包含"Loading virtio.ko"的所有文件 cd initrd find . | xargs grep "Loading virtio ...
- grunt集成自动启动
Grunt可以执行像压缩, 编译, 单元测试, 代码检查以及打包发布的任务. 本文介绍使用Grunt实现nodejs程序自启动功能. 目录: Grunt介绍 Grunt安装 Grunt使用 Grunt ...
- 简单的Web留言本
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Python-Tkinter几何布局管理(转)
所有的Tkinter组件都包含专用的几何管理方法,这些方法是用来组织和管理整个父配件区中子配件的布局的.Tkinter提供了截然不同的三种几何管理类:pack.grid和place. pack() p ...
- GLSL语言基础
from http://www.kankanews.com/ICkengine/archives/120870.shtml 变量 GLSL的变量命名方式与C语言类似.变量的名称可以使用字母,数字以及下 ...
- LoadRunner 多场景批处理
@echo off echo *********************************echo ****多场景测试*************echo ******************** ...
- win32手动创建windows窗口的,小记
摘抄自文档,其中的函数需要以后花时间看 向 WinMain 添加功能 首先,在 WinMain 函数内部创建 WNDCLASSEX 类型的窗口类结构. 此结构包含有关窗口的信息,如应用程序图标.窗口的 ...
- 2016-07-15: Window定时器使用
windows下定时器使用实例 #include <iostream> #include <Windows.h> using namespace std; void Timer ...