整理书本(book)-T2

题目描述

又一个学期结束了, 又积累了好多本书, 你决定好好整理一下,整理时共有三种操作, 规则如下:

1 p 表示把编号为 p 的书放到最前面

2 p 表示把编号为 p 的书放到最后面

3 p q 表示把编号为 p 的书放到编号为 q 的书的后面

1、2、3 分别代表整理操作的种类, p、q 表示书的编号,他们之间由空格分隔;

已知在整理之前,所有书从 1 开始依次编号排放。

输入格式

共 m+1 行。

第一行有两个由空格分隔的正整数 n 和 m, 分别表示 n 本书和 m 次整理操作。

接下来 m 行, 每行有 2 个或 3 个由空格分隔的正整数, 对应上述三种整理操作。

输出格式

共 1 行,经过整理后的书本顺序,书本间用空格隔开。

输入输出样例

输入样例1:
复制代码
10 4 
1 3 
2 4 
3 3 6 
3 1 5
输出样例1:
复制代码
2 5 1 6 3 7 8 9 10 4

说明

数据范围: 1 ≤ n,m ≤ 100000

【耗时限制】1000ms 【内存限制】128MB

-------------------------------------------------------分割线-------------------------------------------------------------

满分AC代码

cpp 复制代码
#include<iostream>
#include<map>
#include<algorithm>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<cstdio>
#include<string>
#include<cstring>
#include<sstream>
#include<set>
using namespace std;
long long l[100010],r[100010];
inline void Link(int L,int R){
	r[L]=R;
	l[R]=L;
}
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		l[i]=i-1;
		r[i]=(i+1)%(n+1);
	}
	l[0]=n;
	r[0]=1;
	int c,x,y;
	int head=1,tail=n;
	int lx,rx,ly,ry;
	for(int i=1;i<=m;i++){
		cin>>c;
		if(c==1){
			cin>>x;
			head=r[0];
			if(x==head) continue;
			lx=l[x],rx=r[x];
			Link(lx,rx);
			l[head]=x;
			r[x]=head;
			l[x]=0;
			r[0]=x;
		}
		if(c==2){
			cin>>x;
			tail=l[0];
			if(x==tail) continue;
			if(n<=1) continue;
			lx=l[x],rx=r[x];
			Link(lx,rx);
			r[tail]=x;
			l[x]=tail;
			r[x]=0;
			l[0]=x;
		}
		if(c==3){
			cin>>x>>y;
			if(x==y) continue;
			if(n<=1) continue;
			if(r[y]==x) continue;
			lx=l[x],rx=r[x];
			ly=l[y],ry=r[y];
			Link(lx,rx);
			Link(x,ry);
			Link(y,x);
		}
	}
	int b=r[0];
	for(int i=1;i<=n;i++){
		cout<<b<<" ";
		b=r[b];
	}
    return 0;
}
相关推荐
gsfl19 分钟前
贪心算法1
算法·贪心算法
小猪咪piggy43 分钟前
【算法】day8 二分查找+前缀和
算法
Word码44 分钟前
[排序算法]希尔排序
c语言·数据结构·算法·排序算法
前端小刘哥1 小时前
解析视频直播点播平台EasyDSS在视频点播领域的技术架构与性能优势
算法
QT 小鲜肉1 小时前
【数据结构与算法基础】05. 栈详解(C++ 实战)
开发语言·数据结构·c++·笔记·学习·算法·学习方法
lingran__1 小时前
算法沉淀第七天(AtCoder Beginner Contest 428 和 小训练赛)
c++·算法
前端小刘哥1 小时前
新版视频直播点播平台EasyDSS,打通远程教研与教师培训新通路
算法
2401_840105201 小时前
P1049 装箱问题 题解(四种方法)附DP和DFS的对比
c++·算法·深度优先·动态规划
kobe_t1 小时前
数据安全系列7:常用的非对称算法浅析
算法
靠近彗星1 小时前
3.4特殊矩阵的压缩存储
数据结构·人工智能·算法