【蓝桥杯】ALGO-1区间k大数查询排序 查找

tech2022-08-03  145

ALGO-1 区间k大数查询

资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。

输入格式 第一行包含一个数n,表示序列长度。

第二行包含n个正整数,表示给定的序列。

第三个包含一个正整数m,表示询问个数。

接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。

输出格式 总共输出m行,每行一个数,表示询问的答案。 样例输入 5 1 2 3 4 5 2 1 5 2 2 3 2 样例输出 4 2 数据规模与约定 对于30%的数据,n,m<=100;

对于100%的数据,n,m<=1000;

保证k<=(r-l+1),序列中的数<=10^6。

#include<stdio.h> #include<iostream> #include<math.h> #include<string.h> #include<algorithm> #include<functional> using namespace std; const int inf = 0x3f3f3f3f; const double pi = acos(-1); typedef long long ll; //ALGO-1 区间k大数查询 int main() { int n, m, l, r, k, a[1007]; scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d", &a[i]); scanf("%d", &m); while(m--) { int b[1007]; scanf("%d %d %d", &l, &r, &k); for(int i = l; i <= r; i++) b[i - l + 1] = a[i]; sort(b + 1, b + r - l + 2, greater<int>()); printf("%d\n", b[k]); } return 0; }

【注】这道题评测机貌似用scanf和printf时必须加头文件#include<stdio.h>才能过,sort函数中若用到greater<int>()则必须加头文件#include<functional>

最新回复(0)