区间K大数

简介: 区间K大数

区间K大数


问题描述


给定一个序列,每次询问序列中第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),序列中的数<=106

代码实现:

#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
#define MAX 1001
int length_str=0;
int question_times=0;
int ques[4];
bool compare(int a,int b)
{
         returna>b;
}
int main(void)
{
         inta[MAX],b[MAX];
         intlength_mid,length_size;
         cin>>length_str;
         for(inti=0;i<length_str;i++){
                   cin>>a[i];
         }
         cin>>question_times;
         for(inti=0;i<question_times;i++){
                   cin>>ques[0]>>ques[1]>>ques[2];//开始 结束 和第几大
                   length_mid=ques[1]-ques[0]+1;
                   length_size=length_mid*4;
                   memcpy(b,a+ques[0]-1,length_size);
                   sort(b,b+length_mid,compare);
                   cout<<b[ques[2]-1]<<endl;
                   }
         return0;
}

评测结果:

蕴含知识点:

1.      排序函数

sort(begin,end);//升序
sort(begin,end,compare);//compare函数自写
bool compare(int a,int b)
{
   return a>b;//降序 a<b升序
}

头文件: <algorithm>

 

2.      内存拷贝函数

memcpy(void *a,const void *b,size_t);

表示不修改内存,将从b开始的连续size_t个字节拷贝至从a开始的内存中(覆盖)。

头文件:


cstring或string.h

相关文章
|
6月前
|
BI 测试技术 Windows
【数位】【数论】【分类讨论】2999. 统计强大整数的数目
【数位】【数论】【分类讨论】2999. 统计强大整数的数目
|
3月前
|
算法 C++
【算法】前缀和算法——和可被K整除的子数组
【算法】前缀和算法——和可被K整除的子数组
|
4月前
|
算法
【算法】二分查找(整数二分和浮点数二分)
算法学习——二分查找(整数二分和浮点数二分)
41 0
【算法】二分查找(整数二分和浮点数二分)
|
4月前
|
C++
643. 子数组最大平均数 I(C++)
643. 子数组最大平均数 I(C++)
|
4月前
1685. 有序数组中差绝对值之和
1685. 有序数组中差绝对值之和
|
6月前
DAY-4 | 力扣 - 求自身以外数组的乘积:区间划分,左右累乘,巧求乘积
该文档是关于LeetCode上的一道题目“Product of Array Except Self”的题解。提供了两种解题方法,一是暴力破解,即计算所有数的乘积后再逐个除以当前元素;二是左右累乘法,通过两次遍历数组分别计算左侧和右侧元素的乘积,避免了除法操作。其中,左右累乘法更优,代码实现中展示了这种方法。
41 1
|
6月前
|
测试技术
643.子数组最大平均数
643.子数组最大平均数
27 0
|
算法
【学会动态规划】乘积为正数的最长子数组长度(21)
【学会动态规划】乘积为正数的最长子数组长度(21)
61 0
每日一题——乘积小于 K 的子数组
每日一题——乘积小于 K 的子数组
73 0
每日一题——乘积小于 K 的子数组
|
算法 C++
【基础算法】几种特殊数(素数、公约数、完全数、亲密数) & C++实现
素数又称为质数,它指在一个大于1的自然数中,除了1和它自身外,没法被其他自然数整除的数。比1大,但不是素数的数称为合数。0和1既不是素数,也不是合数。因为素数的分布没有明显的规律,所以在程序中一般根据素数的定义来判断该数是否为素数。例如哥德巴赫猜想:哥德巴赫通过大量的数据猜测,所有不小于6的偶数,都可以表示为两个奇素数之和。后人将其称之为“1+1”。并且,对于每个不小于9的奇数,都可以表示为三个奇素数之和。
327 0
【基础算法】几种特殊数(素数、公约数、完全数、亲密数) & C++实现