区间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

相关文章
|
7月前
|
BI 测试技术 Windows
【数位】【数论】【分类讨论】2999. 统计强大整数的数目
【数位】【数论】【分类讨论】2999. 统计强大整数的数目
|
7月前
|
算法 测试技术 C++
【动态规划】【数学】【C++算法】1449. 数位成本和为目标值的最大数字
【动态规划】【数学】【C++算法】1449. 数位成本和为目标值的最大数字
|
7月前
|
存储 算法 程序员
平方根倒数快速算法
平方根倒数快速算法
76 0
|
4月前
|
算法
【算法】二分算法——x的平方根
【算法】二分算法——x的平方根
|
7月前
DAY-4 | 力扣 - 求自身以外数组的乘积:区间划分,左右累乘,巧求乘积
该文档是关于LeetCode上的一道题目“Product of Array Except Self”的题解。提供了两种解题方法,一是暴力破解,即计算所有数的乘积后再逐个除以当前元素;二是左右累乘法,通过两次遍历数组分别计算左侧和右侧元素的乘积,避免了除法操作。其中,左右累乘法更优,代码实现中展示了这种方法。
48 1
|
7月前
|
算法 测试技术 C#
【数位dp】【数论】【动态规划】2999. 统计强大整数的数目
【数位dp】【数论】【动态规划】2999. 统计强大整数的数目
|
7月前
|
人工智能 算法
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
|
存储
A除于B(大数相除)
A除于B(大数相除)
77 0
leetcode-829. 连续整数求和(数论)
这题求连续正整数,刚好满足等差数列,可以用等差数列求和公式 n = (i + (i + k)) * (k + 1) / 2 其中i是连续正整数的首项,k是尾项和首项的差值
118 0
leetcode-829. 连续整数求和(数论)
|
人工智能 算法
最大子列和的四种算法及其时间复杂度分析
最大子列和的四种算法及其时间复杂度分析 暴力破解法O(n^3)、暴力破解法改进版O(n^2); 分而治之法O(nlogn)、在线处理算法O(n)。
5164 0
最大子列和的四种算法及其时间复杂度分析