#JSUTCPC2026I. Recall (Contest) —— 追忆 (Contest)

Recall (Contest) —— 追忆 (Contest)

题面描述

我常常追忆过去。

生命瞬间定格在脑海。我将背后的时间裁剪、折叠、蜷曲,揉捻成天上朵朵白云。

云朵之间亦有分别:积云厚重,而卷云飘渺。生命里震撼的场景掠过我的思绪便一生无法忘怀,而更为普通平常的记忆在时间的冲刷下只留下些许残骸。追忆宛如入梦,太过清楚则无法愉悦自己的幻想,过分模糊却又坠入虚无。只有薄雾间的山水,面纱下的女子,那恰到好处的朦胧,才能满足我对美的苛求。

追忆总在不经意间将我裹进泛黄的纸页里。分别又重聚的朋友,推倒又重建的街道,种种线索协助着我从一个具体的时刻出发沿时间的河逆流而上。曾经的日子无法重来,我只不过是一个过客。但我仍然渴望在每一次追忆之旅中留下闲暇时间,在一个场景前驻足,在岁月的朦胧里回望过去的自己,感受尽可能多的甜蜜。美好的时光曾流过我的身体,我便心满意足。

过去已经凝固,我带着回忆向前,只是时常疏于保管,回忆也在改变着各自的形态。这给我的追忆旅程带来些许挑战。

我该在哪里停留?我问我自己。

请注意本题完全不寻常的空间限制!

在过去的 nn 年里,Timothy 保留了 aia_i 个记忆。随着岁月的流逝,他发现直接存下所有的记忆不仅占据了过多的空间,还让查找变得异常迟缓。他决定将记忆整理成一个长度为 NN 的“虚拟数组”(下标范围为 0∼N−10 \sim N-1),只有真正被触碰过的记忆才会被存储。

所以你需要帮助 Timothy 维护一个长度为 NN 的虚拟数组。初始时,数组中所有位置的值均为 00,你需要处理 QQ 次操作,操作形式如下:

  1. set i x :把数组下标 ii 的位置赋值为 xx。
  2. get i :输出数组下标 ii 的值。

对于任何操作,若访问的下标 ii 不在合法范围 [0,N−1][0, N-1] 内,则输出 Segmentation Fault。

输入描述

第一行包含两个整数 N,QN, Q ($1 \leqslant N \leqslant 5\times 10^{7}, 1 \leqslant Q \leqslant 10^5$),分别表示数组长度和操作次数。

接下来 QQ 行,每行描述一个操作:

  1. set i x :把数组下标 ii 的位置赋值为 xx,满足 −1×109⩽i,x⩽1×109-1\times10^9\leqslant i,x\leqslant 1\times10^9。
  2. get i :输出数组下标 ii 的值,满足 −1×109⩽i⩽1×109-1\times10^9\leqslant i\leqslant 1\times10^9。

准确来说我们会这样提供输入格式:

N Q
<操作 1>
<操作 2>
...
<操作 Q>

输出描述

对于 set 操作,如果合法则输出 OK,否则输出 Segmentation Fault。

对于 get 操作,如果合法则输出该位置的值,否则输出 Segmentation Fault。

样例

50000000 5
set 12345 99
get 12345
get 54321
set 50000000 1
get -1
OK
99
0
Segmentation Fault
Segmentation Fault

在等待的梦中所追忆的过往