考题11-1
题目描述
有一个初始时为空的序列,你的任务是维护这个序列,需要进行的各种操作的表示与意义如下:
- 1 k x1 k x: 在序列末尾插入 kk 个值都为 xx 的数;
- 2 k2 k: 删除序列末尾的 kk 个数,若序列已不足 kk 个数,则删除序列中全部的数。
每次操作后,求序列的众数的值。一个序列的众数定义为该数列中出现次数最多的数,若出现次数最多的数有多种,取其中数值最小的数。
输入格式
从标准输入读入数据。
输入第一行为一个正整数 qq,表示操作次数。
接下来 qq 行描述依次进行的操作,每行描述一个操作,每个操作的输入方式同题目描述。
输出格式
输出到标准输出。
对于每个操作,输出操作完成后序列的众数(若序列为空则输出 -1),并换行。
样例1输入
4
1 2 1
1 3 2
2 1
2 5
样例1输出
1
2
1
-1
样例1解释
第 1 次操作后,序列为 1 1
,众数为 1。
第 2 次操作后,序列为 1 1 2 2 2
,1 出现了 2 次,2 出现了 3 次,众数为 2。
第 3 次操作后,序列为 1 1 2 2
,两种数都出现了 2 次,取较小的 1。
第 4 次操作后,序列为空,输出 -1。
样例2
见题目目录下的 2.in 与 2.ans。
样例文件点此下载。
子任务
10% 的数据满足 q≤103,x≤103,k≤3q≤103,x≤103,k≤3;
另有 15% 的数据满足 q≤103,x≤105,k≤3q≤103,x≤105,k≤3;
另有 15% 的数据满足 x≤105,k≤3x≤105,k≤3;
另有 10% 的数据满足 q≤103,x≤105,k≤103q≤103,x≤105,k≤103;
另有 20% 的数据满足 q≤105,x≤105q≤105,x≤105;
另有 20% 的数据满足 x≤105x≤105;
对于所有输入数据,均满足 1≤q≤1061≤q≤106,序列中出现的任何数值 xx 均满足 0≤x≤1090≤x≤109,插入和删除操作中的数目 kk 满足 1≤k≤1091≤k≤109。
时间限制:1s
空间限制:512MB
提示
为了帮助大家完成题目,我们提供了只包含了输入输出功能的程序模板。
你可以根据自己的实际情况,在这些程序的基础上进行作答,或不参考这些程序,这将与你的得分无关。
这些程序可以从这里下载。
考题8-1
题目描述
实现一个双向链表,支持以下操作:
- split_succ(x):将 x 与 x 的后继(后一个)分离,若 x 没有后继,输出 no,否则输出 yes
- split_prev(x):将 x 与 x 的前驱(前一个)分离,若 x 没有前驱,输出 no,否则输出 yes
- link(x, y):将 x 接到 y 的前面,即 x 是 y 的前驱,y 是 x 的后继,若 x 已经有后继或者 y 已经有前驱,输出 no,否则输出 yes
- visit_succ(x):从 x 开始,一直按照后继访问下去,直到回到 x 或者没有后继为止,输出经过的所有节点编号
- visit_prev(x):从 x 开始,一直按照前驱访问下去,直到回到 x 或者没有前驱为止,输出经过的所有节点编号
以上的 x 均为节点编号,一共有 n 个节点,编号从 1 到 n。
一开始 n 个节点的前驱、后继均为空,也就是每个节点都是独立的节点。
输入格式
第一行两个正整数 n, m,接下来有 m 行,每行表示一个操作,格式见样例
输出格式
依次输出 m 行,每行代表一个操作的结果,格式见样例
样例 1 输入
4 15
split_succ 1
split_prev 2
link 1 2
visit_succ 1
link 2 3
link 1 4
visit_succ 1
visit_succ 2
visit_prev 1
link 3 1
visit_prev 1
link 4 1
visit_succ 1
visit_succ 2
visit_succ 3
样例 1 输出
no
no
yes
1 2
yes
no
1 2 3
2 3
1
yes
1 3 2
no
1 2 3
2 3 1
3 1 2
样例 2 和 样例 3
数据范围
对于 60% 的数据,1 ≤ n, m ≤ 100;
对于全部 100% 的数据,1 ≤ n, m ≤ 1,000。
时间限制:2 s
空间限制:512 MB
考题6-1
题意
给定两个二叉树,请判断他们结构是否相同。在这里,二叉树 aa 与 bb 相同,当且仅当 aa 的根节点左子树和 bb 的根节点左子树相同,aa 的根节点右子树和 bb 的根节点右子树相同。
若 aa 和 bb 对应的左(右)子树都是空,也相同。
注意,不需要编号相同,只需要结构相同。
输入
多组数据,第一行为一个正整数 TT,表示数据组数。
对于每组数据:
第一行一个正整数 nn,表示二叉树 aa 和 bb 的节点个数。
接下来 nn 行,描述二叉树 aa,第 ii 行有两个非负整数 l,rl,r,分别表示编号为 i−1i-1 的节点的左孩子与右孩子的编号。
之后还有 nn 行,描述二叉树 bb,第 ii 行有两个非负整数 l,rl,r,分别表示编号为 i−1i-1 的节点的左孩子与右孩子的编号。
注意,每个二叉树的节点编号范围为 00 到 n−1n-1,根节点的编号为 00,编号 −1-1 表示为空。
输出
每组数据输出一行,若该组数据的两个二叉树结构相同,输出 yes,否则输出 no。
样例 1 输入
2
3
1 2
-1 -1
-1 -1
2 1
-1 -1
-1 -1
3
1 -1
2 -1
-1 -1
-1 1
2 -1
-1 -1
样例 1 输出
yes
no
样例 1 解释
第一个数据是 yes,如图
解释一下第一个数据的二叉树,数据是这样的
3 // 有 3 个点
1 2 // 二叉树 a 的 0 号点左孩子为 1,右孩子为 2
-1 -1 // 二叉树 a 的 1 号点左孩子为空,右孩子为空
-1 -1 // 二叉树 a 的 2 号点左孩子为空,右孩子为空
2 1 // 二叉树 b 的 0 号点左孩子为 2,右孩子为 1
-1 -1 // 二叉树 b 的 1 号点左孩子为空,右孩子为空
-1 -1 // 二叉树 b 的 2 号点左孩子为空,右孩子为空
第二个数据是 no。
样例 2 和 样例 3
数据范围
对于 30% 的数据,T=1,n=10T=1,n=10;
对于另 30% 的数据,T=10,n=1000T=10,n=1000;
对于另 40% 的数据,T=10,n=10000T=10,n=10000。
时间:2 sec
空间:512 MB
提示
为了帮助大家完成题目,我们提供了只包含了输入输出功能的程序模板。
你可以根据自己的实际情况,在这些程序的基础上进行作答,或不参考这些程序,这将与你的得分无关。