AT_abc344_e 题解

本文同步发表于洛谷

赌狗天天输的一集。

赛时各种【数据删除】原因导致没做出来。

大意

给你一个长度为 \(N\) 的序列 \(A=(A_1,\ldots,A_N)\)。保证 \(A\) 中的元素是不同的。

你要处理 \(Q\) 个操作。每个操作是以下两种类型之一:

  • 1 x y:在 \(A\) 中元素 \(x\) 后面紧接着插入 \(y\)。当给出此查询时,保证 \(x\) 存在于 \(A\) 中。
  • 2 x:从 \(A\) 中删除元素 \(x\)。当给出此查询时,保证 \(x\) 存在于 \(A\) 中。

保证在处理完每一个查询后,\(A\) 都不是空的,并且其元素都是不同的。

处理完所有查询后,打印 \(A\)

一句人话:模板双向链表。

思路

不知道链表的可以学一下单向链表,B3631

单向链表大致长这样:

但是!我们的主角双向链表他有出息!他两边都能指!

然后,我高高兴兴的写代码(很简单,按照题面直接做就行),直接就超时了。

我蒙了,为啥?发现是从 head 调到对应位置太耗时间了。

诶,有没有注意到题面说了“保证 \(A\) 中的元素是不同的。” 和“保证在处理完每一个查询后,\(A\) 都不是空的,并且其元素都是不同的。”?

我不要离散化!\(10^9\) 直接 map 启动!

然后代码木大木大了很久还是不对,后来发现是添加的时候忘记更新 x.bef 了…

代码

#include<stdio.h>
#include<bits/stdc++.h>
#define N 1000010
#define MOD 998244353
#define esp 1e-8
#define INF 999999999999999999
#define LL long long
#define rep(i,a,b,g) for(LL i=a;i<=b;i+=g)
#define rem(i,a,b,g) for(LL i=a;i>=b;i-=g)
#define repn(i,a,b,g) for(LL i=a;i<b;i+=g)
#define remn(i,a,b,g) for(LL i=a;i>b;i-=g)
#define pll pair<LL,LL>
#define mkp(x,y) make_pair(x,y)
#define i128 LL
#define lowbit(x) ((x)&(-(x)))
#define lc (u<<1)
#define rc (u<<1|1)
using namespace std;
void read(i128 &x)
{
	i128 f=1;
	x=0;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=x*10+ch-'0';
		ch=getchar();
	}
	x*=f;
}
void write(i128 x)
{
	if(x>=10)write(x/10);
	putchar(x%10+'0');
}
LL n,a[200010],q,op,x,y,o;
struct nod
{
	LL v,nxt,bef;
}l[400010];
map<LL,LL>f;
int main()
{
	cin>>n;
	l[0].nxt=1;
	rep(i,1,n,1)
	{
		cin>>a[i];
		l[i].v=a[i];
		l[i].nxt=i+1;
		l[i].bef=i-1;
		f[a[i]]=i;
	}
	o=n+1;
	cin>>q;
	while(q--)
	{
		cin>>op;
		if(op==1)
		{
			cin>>x>>y;
			LL t=f[x];
			l[++o]=(nod){y,l[t].nxt,t};
			l[l[t].nxt].bef=o;
			l[t].nxt=o;
			f[y]=o;
		}
		else
		{
			cin>>x;
			LL t=f[x];
			l[l[t].nxt].bef=l[t].bef;
			l[l[t].bef].nxt=l[t].nxt;
			f[x]=0;
		}
	}
	nod u=l[l[0].nxt];
	while(u.v!=0)
	{
		cout<<u.v<<' ';
		u=l[u.nxt];
	}
	return 0;
}

闲话

赛后突然想起一个东西:

我【数据删除】!有个玩意叫 list

我是消愁。

代码就不放了,STL 真的简单。

posted @   cppom  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
  1. 1 世末歌者 乐正绫
世末歌者 - 乐正绫
00:00 / 00:00
An audio error has occurred.

蝉时雨 化成淡墨渲染暮色

渗透着 勾勒出足迹与车辙

欢笑声 与漂浮的水汽饱和

隔着窗 同城市一并模糊了

拨弄着 旧吉他 哼着四拍子的歌

拨弄着 旧吉他 哼着四拍子的歌

回音中 一个人 仿佛颇悠然自得

等凉雨 的温度 将不安燥热中和

寻觅着 风的波折

我仍然在无人问津的阴雨霉湿之地

我仍然在无人问津的阴雨霉湿之地

和着雨音 唱着没有听众的歌曲

人潮仍是漫无目的地向目的地散去

忙碌着 无为着 继续

等待着谁能够将我的心房轻轻叩击

等待着谁能够将我的心房轻轻叩击

即使是你 也仅仅驻足了片刻便离去

想着或许 下个路口会有谁与我相遇

哪怕只 一瞬的 奇迹

夏夜空 出现在遥远的记忆

夏夜空 出现在遥远的记忆

绽放的 璀璨花火拥着繁星

消失前 做出最温柔的给予

一如那些模糊身影的别离

困惑着 拘束着 如城市池中之鱼

困惑着 拘束着 如城市池中之鱼

或哽咽 或低泣 都融进了泡沫里

拖曳疲惫身躯 沉入冰冷的池底

注视着 色彩褪去

我仍然在无人问津的阴雨霉湿之地

我仍然在无人问津的阴雨霉湿之地

和着雨音 唱着没有听众的歌曲

人潮仍是漫无目的地向目的地散去

忙碌着 无为着 继续

祈求着谁能够将我的心房轻轻叩击

祈求着谁能够将我的心房轻轻叩击

今天的你 是否会留意并尝试去靠近

因为或许 下个路口仍是同样的结局

不存在 刹那的 奇迹

极夜与永昼

极夜与永昼

别离与欢聚

脉搏与呼吸

找寻着意义

我仍然在无人问津的阴雨霉湿之地

我仍然在无人问津的阴雨霉湿之地

和着雨音 唱着卖不出去的歌曲

浮游之人也挣扎不已执着存在下去

追逐着 梦想着 继续

请别让我独自匍匐于滂沱世末之雨

请别让我独自匍匐于滂沱世末之雨

和着雨音 唱着见证终结的歌曲

人们终于 结束了寻觅呆滞伫立原地

哭泣着 乞求着 奇迹

用这双手 拨出残缺染了锈迹的弦音

用这双手 拨出残缺染了锈迹的弦音

都隐没于淋漓的雨幕无声无息

曲终之时 你是否便会回应我的心音

将颤抖的双手牵起

迎来每个人的结局

点击右上角即可分享
微信分享提示