bdfz_2024_summer/day10/U178578/U178578.md

1.6 KiB
Raw Blame History

冒泡排序

题目背景

对于一个排列 $a[1...n]$,进行一趟冒泡排序的代码为:

for(int i=1;i<n;++i){
    if(a[i]>a[i+1]) swap(a[i], a[i+1]);
}

在进行 n-1 趟冒泡排序之后,数组变为有序。

题目描述

给一个长度为 n 的排列 a[1...n]q 次询问,每次询问形如 $(k,x)$:代表询问 x 这个数在 k 趟排序之后的位置下标。

输入格式

第一行1个整数 n

第二行 n 个整数 $a[1...n]$,保证是一个排列

第三行1个整数 q

接下来 q每行2个整数 (k,x) 代表一次询问

输出格式

输出 q每行1个整数代表答案

样例 #1

样例输入 #1

5
4 3 5 1 2
3
2 1
4 4
1 5

样例输出 #1

2
4
5

样例 #2

样例输入 #2

5
4 5 2 3 1
5
3 1
4 2
3 3
2 4
1 5

样例输出 #2

2
2
3
4
5

样例 #3

样例输入 #3

见下发样例

样例输出 #3


提示

【样例1解释】

第1趟排序之后数组变为 [3,4,1,2,5]

第2趟排序之后数组变为 [3,1,2,4,5]

第3趟排序之后数组变为 [1,2,3,4,5]

【数据范围】

对于20%的数据,$n,q\le 2000$。

对于另20%的数据,$n,q\le 10^5$,不同的 k 取值不超过20种。

对于另20%的数据,$n,q\le 10^5$,不同的 x 取值不超过20种。

对于另20%的数据,$n,q\le 10^5$。

对于100%的数据,$1\le n,q \le 5\times 10^5, 1\le k<n, 1\le x\le n$a[1...n] 保证是一个排列。

注意输入输出量较大,请使用快速的读写方式。