P2776 [SDOI2007]小组队列

题目背景

嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有!

这么简单的题怎么可以没有!

给大家提升士气是义不容辞的责任!

所以我就来补一下啦..

值得一提的是,标程是我自己做的..

很渣,因为数据很水所以能AC..

大神勿喷..

题目描述

有 m 个小组, n 个元素,每个元素属于且仅属于一个小组。

支持以下操作:

push x:使元素 x 进队,如果前边有 x 所属小组的元素,x 会排到自己小组最后一个元素的下一个位置,否则 x 排到整个队列最后的位置。

pop:出队,弹出队头并输出出队元素,出队的方式和普通队列相同,即排在前边的元素先出队。

输入输出格式

输入格式:

第一行有两个正整数 n, m,分别表示元素个数和小组个数,元素和小组均从 0 开始编号。

接下来一行 n 个非负整数 Ai,表示元素 i 所在的小组。

接下来一行一个正整数 T ,表示操作数。

接下来 T 行,每行为一个操作。

输出格式:

对于每个出队操作输出一行,为出队的元素。


首先, 若是在队列中有某一组元素, 那么他们的序号的连续的, 弹出满足先进先出这一性质; 同时, 我们把一整组看做一个元素, 这些元素满足先进先出

所以我们开两类队列, 第一类总队列: 记录组的队列, 第二类记录每一个组内的元素的队列。

当某一元素加入时, 若这一组之前没有出现(体现在次组队列大小为 \(0\)), 我们就在总队列中将次组元素入队; 同理, 当弹出后次组元素个数为 \(0\) 我们就弹出总队列首即可

Code

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
typedef long long LL;
using namespace std;
int RD(){
int out = 0,flag = 1;char c = getchar();
while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const int maxn = 100019;
queue<int>Q;
queue<int>q[319];
int num, na;
int father[maxn];
int main(){
num = RD();RD();
for(int i = 0;i < num;i++)father[i] = RD();
na = RD();
char cmd[19];
for(int i = 1;i <= na;i++){
cin>>cmd;
if(cmd[1] == 'u'){
int x = RD();
if(q[father[x]].empty())Q.push(father[x]);
q[father[x]].push(x);
}
else{
int u = Q.front();
printf("%d\n", q[u].front());
q[u].pop();
if(q[u].empty())Q.pop();
}
}
return 0;
}

P2776 [SDOI2007]小组队列的更多相关文章

  1. luogu P2776 [SDOI2007]小组队列

    题目背景 嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有! 这么简单的题怎么可以没有! 给大家提升士气是义不容辞的责任! 所以我就来补一下啦.. 值得一提的是,标程是我自己做的.. 很渣,因为数 ...

  2. 洛谷P2776 [SDOI2007]小组队列 链表 + 模拟

    有些细节需要注意: 1.编号和元素种类都从0开始标号. 2.需要特判一下队列被弹空的情况. Code: #include<cstdio> #include<cstring> u ...

  3. 【数据结构】洛谷2019 OI春令营 - 普及组 作业

    [P3662][USACO17FEB]Why Did the Cow Cross the Road II S 求解连续的k个数的最大值,利用前缀和维护即可. #include<bits/stdc ...

  4. postfix队列管理

    队列管理单元的服务器程序--qmgr,是整个postfix系统的中心枢纽.所有邮件,包括等待送出与从外界收进来的,都必须通过队列.了解队列的运行原理以及postfix如何处理队列,有助于你解决问题.  ...

  5. 【框架学习与探究之消息队列--EasyNetQ(1)】

    前言 本文欢迎转载,实属原创,本文原始链接地址:http://www.cnblogs.com/DjlNet/p/7603554.html 废话 既然都是废话了,所以大家就可以跳过了,这里是博主有事没事 ...

  6. C#:消息队列应用程序

    Carl NolanMicrosoft Corporation 摘要:本文概述一种用于处理若干消息队列的 Windows 服务解决方案,重点介绍 .NET 框架和 C# 应用程序. 下载 CSharp ...

  7. 【BZOJ1758】【WC2010】重建计划(点分治,单调队列)

    [BZOJ1758][WC2010]重建计划(点分治,单调队列) 题面 BZOJ 洛谷 Description Input 第一行包含一个正整数N,表示X国的城市个数. 第二行包含两个正整数L和U,表 ...

  8. bzoj 1758 [Wc2010]重建计划 分数规划+树分治单调队列check

    [Wc2010]重建计划 Time Limit: 40 Sec  Memory Limit: 162 MBSubmit: 4345  Solved: 1054[Submit][Status][Disc ...

  9. RabbitMQ五:生产者--队列--多消费者

    一.生成者-队列-多消费者(前言) 上篇文章,我们做了一个简单的Demo,一个生产者对应一个消费者,本篇文章就介绍 生产者-队列-多个消费者,下面简单示意图 P 生产者    C 消费者  中间队列 ...

随机推荐

  1. spring冲刺第三天

    昨天完成了环境配置和初步的地图设想. 今天从网上找了有关这方面的例子,运行试验了一番.编写的地图画面在程序上运行了一下,有些错误,还需要很多方面的改进. 这些例子有很多地方都不太懂,但还是看完了.我认 ...

  2. Struts2 核心流程

    1.Struts2架构图  这是Struts2官方站点提供的Struts 2 的整体结构.  执行流程图 2.Struts2部分类介绍  这部分从Struts2参考文档中翻译就可以了. ActionM ...

  3. 我的JAVA运算符理解

    基本概念 原码,反码,补码 只需要记住这几句就够了  1.二进制的最高位是符号位:0表示正数,1表示负数 2.正数的原码,反码,补码都一样 3.负数的反码=它的原码符号位不变,其他位取反 4.负数的补 ...

  4. Head First Java & 构造函数

        java继承中对构造函数是不继承的,只是调用(隐式或显式). ----------------------------------------------------------------- ...

  5. SQL语句中的output用法

    private void button2_Click(object sender, RoutedEventArgs e) { using (SqlConnection conn = new SqlCo ...

  6. 定时任务中的备份不同的数据库中的所有的表,每个表使用单独的sql备份文件

    #! /bin/bash # 指定用户 USER=root # 指定密码 PASS=123456 # 指定主机地址 HOST=localhost # 指定备份的目录 BACKUP=/backup/sq ...

  7. Pascal-S代码注释

    注释参考博文 http://www.cnblogs.com/luxiaodou/p/6025124.html 注释代码 https://github.com/Hesitater/Pascal-S-Co ...

  8. docker删除为<none>的镜像

    $ docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }')  //停止容器      $ docker rm ...

  9. 使用JavascriptExecutor改变页面元素

    如下如html的页面代码 <html> <body> <input type="text" name="text" value=& ...

  10. MiniUI合并单元格

    function onload(e){ var grid = e.sender; var len = grid.data.length; var data= grid.data; ,num=; var ...