动态序列
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

你有一个长度为 n 的序列 a ,第 i 位的值为 a_i ,下标从 1 开始 。
序列中第 x 小的值 为 整个序列从小到大排序之后,第 x 位的值。
现在要进行 q 次操作,每次操作给出两个参数 p 和 x
如果 p=0 ,请输出序列中第 x 小的值。
如果 p>0 ,请把 a_p 修改为 x

由于本题数据量较大,除了C语言选手,请优化你们的输入输出 。
这里给出几种 C++ 的优化方案。
1.关闭流同步,把 endl 替换为 '\n' 。
#include <iostream>
using namespace std;
int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin>>n;
    cout<<n<<'\n';
    return 0;
}
2.使用  \href{https://blog.csdn.net/m0_57362922/article/details/126577490}{快读模板}
3.使用头文件 cstdio ,然后用 scanf 和 printf 。

输入描述:

第一行有两个整数 n\ (\ 1 \leq n \leq {10}^6\ ) 和 q\ (\ 1 \leq q \leq {10}^6\ ) 。
第二行有 n 个整数 a_i\ (\ 1 \leq a_i \leq {10}^6\ ) 。
随后 q 行,每行两个整数 p\ (\ 0 \leq p \leq n\ ) 和 x\ (\ 1 \leq x \leq n\ )

输出描述:

对于每次 p=0 的操作,输出序列中第 x 小的值,并换行。
示例1

输入

复制
5 10
1 4 2 5 3
0 1
0 2
0 3
0 4
0 5
4 2
0 3
1 5
0 1
0 3

输出

复制
1
2
3
4
5
2
2
3