题目描述

一个学校里老师要将班上NNN个同学排成一列,同学被编号为1∼N1\sim N1∼N,他采取如下的方法:

  1. 先将111号同学安排进队列,这时队列中只有他一个人;

  2. 2−N2-N2−N号同学依次入列,编号为i的同学入列方式为:老师指定编号为i的同学站在编号为1∼(i−1)1\sim (i -1)1∼(i−1)中某位同学(即之前已经入列的同学)的左边或右边;

  3. 从队列中去掉M(M<N)M(M<N)M(M<N)个同学,其他同学位置顺序不变。

在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号。

输入输出格式

输入格式:

第111行为一个正整数NNN,表示了有NNN个同学。

第2−N2-N2−N行,第iii行包含两个整数k,pk,pk,p,其中kkk为小于iii的正整数,ppp为000或者111。若ppp为000,则表示将iii号同学插入到kkk号同学的左边,ppp为111则表示插入到右边。

第N+1N+1N+1行为一个正整数MMM,表示去掉的同学数目。

接下来MMM行,每行一个正整数xxx,表示将xxx号同学从队列中移去,如果xxx号同学已经不在队列中则忽略这一条指令。

输出格式:

111行,包含最多NNN个空格隔开的正整数,表示了队列从左到右所有同学的编号,行末换行且无空格。

输入输出样例

输入样例#1: 复制

4
1 0
2 1
1 0
2
3
3
输出样例#1: 复制

2 4 1

说明

样例解释:

将同学222插入至同学111左边,此时队列为:

212 121

将同学333插入至同学222右边,此时队列为:

2312 3 1231

将同学444插入至同学111左边,此时队列为:

23412 3 4 12341

将同学333从队列中移出,此时队列为:

2412 4 1241

同学333已经不在队列中,忽略最后一条指令

最终队列:

2412 4 1241

数据范围

对于20%20\%20%的数据,有N≤10N≤10N≤10;

对于40%40\%40%的数据,有N≤1000N≤1000N≤1000;

对于100%100\%100%的数据,有N,M≤100000N, M≤100000N,M≤100000。

----------------------------------------分割分割分割------------------------------------------------------------------------

很基础很基础

我拿不准的地方在于

如何输出:

第一个是什么?

所以借鉴了一下

-----------------------------------------------------------------------------------------------------------------------------------

#include<cstdio>
using namespace std;
#define maxn 100010
int data[maxn],nxt[maxn],pre[maxn];
int n,cnt = 1;
bool flag[maxn];
void add(int l,int r,int x) {
    data[++cnt] = x;
    pre[cnt] = l;
    nxt[cnt] = r;
    nxt[l] = cnt;
    pre[r] = cnt;
}
void del(int x) {
    nxt[pre[x]] = nxt[x];
    pre[nxt[x]] = pre[x];
}
int main() {
    scanf("%d",&n);
    data[1] = 1;
    int head = 1;
    flag[1] = true;
    for(int i = 2; i <= n; i++) {
        int k,p;
        scanf("%d%d",&k,&p);
        flag[i] = true;
        if(p == 0) {
            if(k == head)
                head = i;
            add(pre[k],k,i);
        } else
            add(k,nxt[k],i);
    }
    int m;
    scanf("%d",&m);
    for(int i = 1; i <= m; i++) {
        int x;
        scanf("%d",&x);
        if(!flag[x])
            continue;
        if(x == head)
            head = nxt[x];
        del(x);
        cnt--;
        flag[x] = false;
    }
    for(int i = head; cnt; i = nxt[i]) {
        printf("%d ",data[i]);
        cnt--;
    }
    return 0;
}
----------------------------------------------------------------------------------------------
 
希望下次记得
设一个变量
用来记录第一个元素
 
加油

P1160 队列安排 luogu洛谷的更多相关文章

  1. luogu P1160 队列安排

    二次联通门 :luogu P1160 队列安排 /* luogu P1160 队列安排 链表 手动模拟一下就好了... */ #include <cstdio> #define Max 5 ...

  2. 队列 P1160 队列安排(啊啊 不会啊)

    洛谷 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为 ...

  3. 【新知识】队列&bfs【洛谷p1996约瑟夫问题&洛谷p1451求细胞数量】

    (是时候为五一培训准备真正的技术了qwq) part1  队列(FIFO) 算法简介: FIFO:First In First Out(先进先出) 队列是限定在一端进行插入,另一端进行删除的特殊线性表 ...

  4. P1160 队列安排 洛谷

    https://www.luogu.org/problem/show?pid=1160 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进 ...

  5. 洛谷 P1160 队列安排 Label:链表 数据结构

    题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...

  6. 洛谷 P1160 队列安排

    题目描述 一个学校里老师要将班上 NNN 个同学排成一列,同学被编号为 $1-N$ ,他采取如下的方法: 先将 111 号同学安排进队列,这时队列中只有他一个人: 2−N2-N2−N 号同学依次入列, ...

  7. 洛谷P1160 队列安排

    题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...

  8. 洛谷P1160——队列安排(双向链表)

    题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...

  9. 洛谷——P1160 队列安排(链表的基础操作)

    #include<bits/stdc++.h> using namespace std; ]; list<int> stus; list<];//用来存放每一项的迭代器 ...

随机推荐

  1. 修改Mysql字符集

    第一种 一.修改my.ini配置文件(MySQL配置文件) character_set_server = utf8 #设置字符集 重启mysql数据库服务 查看当前数据库字符集 show VARIAB ...

  2. Mybatis获取插入记录的自增长ID

    转自:http://blog.csdn.net/tolcf/article/details/39035259 1.在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“k ...

  3. spring boot 之 Mybatis 配置

    ############################## mybatis配置 ######################################mybatis.configuration ...

  4. 在C语言结构体中添加成员函数

    我们在使用C语言的结构体时,经常都是只定义几个成员变量,而学过面向对象的人应该知道,我们定义类时,不只是定义了成员变量,还定义了成员方法,而类的结构和结构体非常的相似,所以,为什么不想想如何在C语言结 ...

  5. c语言学习笔记-do......while

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.do......while函数意义 循环执行(人机交互) 二.do......while函数结构 do{ 语句1: 语句2: ...

  6. HTML5实现video标签的自定义播放进度条

    现在随着html5的渐热,越来越多的web开发者都开始选择使用html5写出一些比较好的web应用. html代码: <!DOCTYPE html> <html lang=" ...

  7. Arrow模块生成时间

    import arrow def isLeapYear(years): ''' 通过判断闰年,获取年份years下一年的总天数 :param years: 年份,int :return:days_su ...

  8. modifyGeoJSON

    from osgeo import ogr import json from geojson import loads, dumps, Feature, FeatureCollection from ...

  9. (后端)NoSuchMethodError

    这个错误是说编译时有这个方法,但运行时没有了 请使用:mvn clean install

  10. mysql的varchar字段可以存储多少个中文字符

    创建数据库,并创建一张表mytb进行测试 ******************************************************************************* ...