本文主要是介绍询问序列中第l个数到第r个数中第K大的数是哪个,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
1 2 3 4 5
2
1 5 2
2 3 2
2
对于30%的数据,n,m<=100;
对于100%的数据,n,m<=1000;
保证k<=(r-l+1),序列中的数<=106。
#include <stdio.h>
int fun(int a[],int start,int end,int index){int len= end-start+1;int i,j,k;int b[len];for(i=0;i<len;i++){b[i] =a[start-1+i];}//排序for(i=0;i<len;i++){for(j=len-1;j>i;j--){if(b[j]>b[j-1]){k = b[j];b[j]=b[j-1];b[j-1] = k;} }} return b[index-1];}
int main(){int n,m;int i,j,k,ans,count=1;while(scanf("%d",&n)!=EOF){int a[n];for(i=0;i<n;i++){scanf("%d",&a[i]);}scanf("%d",&m);int b[m][3];for(i=0;i<m;i++){for(j=0;j<3;j++){scanf("%d",&b[i][j]);}}for(i=0;i<m;i++){printf("%d\n",fun(a,b[i][0],b[i][1],b[i][2])); }}return 0;
}
这篇关于询问序列中第l个数到第r个数中第K大的数是哪个的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!