EVERYTHING HAPPENS FOR THE |

wnsyou

园龄:2年4个月粉丝:19关注:16

2023-05-24 14:16阅读: 36评论: 0推荐: 0

abc273_e Notebook 题解

Notebook

题意

q 次操作。

现在你有一个空序列 a 和一本 109 页的笔记本,每页纸上都有一个空序列。

每次操作是以下四种中的一种:

  • ADD x,表示在 a 的末尾插入一个整数 x
  • DELETE,表示删除 a 的末尾的一个数,如果 a 序列为空则什么也不干。
  • SAVE y,表示将第 y 页纸上的序列替换为 a
  • LOAD z,表示将 a 换成第 z 页纸上的序列。

对于每次操作,你需要输出操作完后的 a 序列的最后一个数,如果 a 为空则输出 -1,输出用空格分隔。

数据范围

  • 1q5×105
  • 1x,y,z109

思路

如果只有 ADDDELETE,应该都会做,栈模拟。

经过观察,我们可以发现:SAVELOAD 两种操作既耗时间又耗空间,但两种操作都与原序列有些关联!

ADD 就相当于往下 dfsDELETE 就相当于回溯,欸,这不就是 dfs 树吗?考虑把序列建成一个树。

假设现在考虑的节点编号为 now,节点数量为 n

now 初始可以设为 0

  • ADD x,就是给 now 建立一个儿子节点 n+1,节点记录的数为 x,并将 now 设为 n+1
  • DELETE,就是将 now 改为 now 的父亲节点编号。
  • SAVE y,给第 y 页纸记录一个存档的节点编号,这个编号也就是 now
  • LOAD z,将 now 设为第 z 张纸记录的存档节点编号。

由于页数有 109,所以要用 map 存储每页纸存储的存档节点编号。

复杂度

  • 时间:O(qlogq)
  • 空间:O(q)

Code

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int Q = 5e5 + 10;
struct ID {
int x, fa; // x 记录数值,fa 记录父亲节点编号
} a[Q];
int q, x, n, now;
string s;
map<int, int> mp; // 每页纸上记录的存档的节点编号
int main () {
ios::sync_with_stdio(0), cin.tie(0);
a[0].x = -1;
for (cin >> q; q; q--) {
cin >> s;
if (s[0] != 'D') {
cin >> x;
}
if (s == "DELETE") { // 回溯
now = a[now].fa;
} else if (s == "ADD") { // 新建节点
a[++n] = {x, now}, now = n;
} else if (s == "SAVE") { // 存档
mp[x] = now;
} else { // 取档
now = mp[x];
}
cout << a[now].x << ' ';
}
return 0;
}

本文作者:wnsyou の blog

本文链接:https://www.cnblogs.com/wnsyou-blog/p/17428015.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wnsyou  阅读(36)  评论(0编辑  收藏  举报
  1. 1 勝利への道 安藤浩和
  2. 2 Minecraft’s End Eric Fullerton
  3. 3 月光曲完整版 贝多芬 云熙音乐
  4. 4 平凡之路 (Live版) 朴树
  5. 5 Minecraft C418
  6. 6 Paradise NiziU
  7. 7 叫我,灰原哀 龙大人不喷火
  8. 8 心机之蛙,一直摸你肚子 ——《名侦探柯南》原创同人曲 炊饭,叶辞樱,温海,寒砧,南柯柯,小茜玛姬,盛姝,阿崔Ac,贝壳初,千湛,兮茶子DaYu,乔慕,黎鹿北,起千温卿,遮阳伞,曲悠
  9. 9 战 歌 此去经年
Paradise - NiziU
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : AKIRA/Bang Chan (3RACHA)/CHANGBIN (3RACHA)/HAN (3RACHA)

作曲 : Bang Chan (3RACHA)/CHANGBIN (3RACHA)/HAN (3RACHA)/VERSACHOI

编曲 : VERSACHOI/Bang Chan(3RACHA)

昔々きいた話

ふたつの虹を超えたその向こう

光り輝く泉がある

その水面(みなも)映るのは

ほんとの自分

しあわせは今 しあわせは空

Let’s fly fly & fly We fly & fly

目と目を合わせ

信じあえるよ 感じあえるさ

Let’s fly fly & fly We fly & fly

いつか

わかるだろう

君にはもう君だけの色も形も

優しさも強さもあるんだ

上手くいかなくたって

失敗ばっかりだって

ぼくはここにいるよ

I love you so much 大好きなんだ

そのままで 大好きさ Paradise

宝物はそこにあるよ 気がついてよ

世界中探しても

君は君しかいないよ

広がる楽園 繋げよう

誰も誰もが Paradise

雨が降れば ぬかるむ道 Oh yeah

道端に咲いた花に集まる蝶を

照らす太陽は全てを温め

乾いた道に雨は降る

あたりまえだけど奇跡

小さなちっぽけな今には

大きな大きな夢が詰まっているの

悔しさに泣いたって

手を差し伸べるから

ぼくはここにいるから

I love you so much 大好きなんだ

そのままで 大好きさ Paradise

宝物は君なんだよ 気がついてよ

この惑星(ほし)の歴史にも

君は君しかいないよ

目に見えないけど確かに

ひとりひとりの Paradise

しあわせは今 しあわせは空

Let’s fly fly & fly We fly & fly

目と目を合わせ

信じあえるよ 感じあえる

だから大丈夫

心のまま行こう Paradise

加载中…

{{tag.name}}

{{tran.text}}{{tran.sub}}
无对应文字
有可能是
{{input}}
尚未录入,我来提交对应文字
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示