整理书本(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;
}
相关推荐
折哥的程序人生 · 物流技术专研8 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
想吃火锅10059 小时前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展
云絮.10 小时前
数据库操作
数据库·mysql·算法·oracle
小林ixn11 小时前
LeetCode 206. 反转链表(迭代 + 递归详解)
算法·leetcode·链表
凡人叶枫11 小时前
Effective C++ 条款17:以独立语句将 newed 对象置入智能指针
java·linux·开发语言·c++·算法
菜鸟‍12 小时前
LeetCode 1 27 和 704 || 两数之和 移除元素 二分查找
算法·leetcode·职场和发展
退休倒计时13 小时前
【每日一题】LeetCode 142. 环形链表 II TypeScript
算法·leetcode·链表·typescript
popcorn_min14 小时前
Digits 手写数字识别:随机森林多分类 + 像素级特征热力图
算法·随机森林·分类
liulilittle14 小时前
拥塞控制:排水终止的两种决策:OR 与 AND
网络·tcp/ip·计算机网络·算法·信息与通信·tcp·通信
weixin_3077791315 小时前
从脚本执行到智能体协作:AI辅助测试能力的范式重构
运维·开发语言·人工智能·算法·测试用例