栈与公约数
题号:NC244671
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

公约数,亦称"公因数"。

它是指能同时整除几个整数的数。如果一个整数同时是几个整数的约数,称这个整数为它们的"公约数"。

公约数中最大的称为最大公约数。

初始有一个为空的栈,进行q次操作,操作分为以下四种:

1.在栈顶放入一个元素x

2.删除栈顶元素(数据保证此时栈内至少有一个元素)

3.查询栈顶元素

4.将栈顶的k个元素修改成他们的最大公约数(数据保证k不超过栈中元素数量)(比如栈内元素是4,2,将栈顶的2个元素修改成他们的最大公约数,栈内元素是2,2)

输入描述:

第一行一个正整数q,

接下来的q行,每行包括一到两个整数,第一个整数op表示操作类型:

当op = 1时,该行会有第二个整数x,表示在栈顶放入元素x

当op = 2时,该行只有一个整数op,表示删除此时栈顶的元素(数据保证此时栈内至少有一个元素)

当op = 3时,该行只有一个整数op,此时你需要输出栈顶的元素

当op = 4时,该行会有第二个整数k,表示在将栈顶的k个元素修改成他们的最大公约数(数据保证k不超过栈中元素数量)

对于100%的数据,1 <= q <= 200000,1 <= x <= 100000000

输出描述:

对于每个op = 3的询问,分别输出一行y,表示此时栈顶的元素
示例1

输入

复制
11
1 2
1 3
3
4 2
3
2
1 2
4 2
3
2
3

输出

复制
3
1
1
1