蓝桥杯 算法训练 区间k大数查询
问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。 输入格式 第一行包含一个数n,表示序列长度。 第二行包含n个正整数,表示给定的序列。 第三个包含一个正整数m,表示询问个数。 接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。输出格式总共输出m行,每行一个数,表示询问的答案。 样例输入 1 2 3 4 5 5 1 2 3 4 5 2 1 5 2 2 3 2 样例输出 1 2 4 2 数据规模与约定 对于30%的数据,n,m<=100; 对于100%的数据,n,m<=1000; 保证k<=(r-l+1),序列中的数<=106。 C++算法解析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #include "iostream" #include "algorithm" using namespace std; int a[1001], b[1001]; bool cmp(int a, int b){ return a>b; } int main(){ int n, m; int l, r, k; int i, j; while(cin>>n){ for(i=0; i<n; i++){ cin >> a[i]; } cin >> m; while(m--){ cin >>l>>r>>k; for(j=l-1, i=0; j<r; ++j,++i){ b[i] = a[j]; } sort(b, b+i, cmp); cout<<b[k-1]<<endl; } } return 0; } 关注微信公众号,第一时间获取最新内容,让我们一起变得更强!Debug客栈:订阅本站· 文章归档· 我的项目· 友情链接· 我的使用· 飞湾计划· 摄影展集· 我的主页· 知盈官网
以上内容来自博客订阅源,版权归原作者。关注作者后可以在 关注列表 第一时间查看作者文章。
登录后,加入这场讨论。
登录参与