给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
#include "stdio.h" int main() { int n,m,i,j,r,l,k,min,w,g; int a[1000],b[1000]; //printf("请输入n: "); scanf("%d",&n); //printf("请输入%d个数:",n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i=0;i<n;i++) //将数组a给b,后面用 { b[i]=a[i]; } //printf("请输入数值m:"); scanf("%d",&m); for(w=0;w<m;w++) { //printf("请输入l r k:"); scanf("%d%d%d",&l,&r,&k); //数组给定范围排序 for(j=l-1;j<r-1;j++) { for(g=j+1;g<=r-1;g++) { if(a[j]<a[g]) { min=a[j]; a[j]=a[g]; a[g]=min; } } } printf("%d\n",a[l+k-2]); //具体位置为l-1+k-1--->l+k=2 for(i=0;i<n;i++) { a[i]=b[i]; //覆盖过去 } } return 0; }
原文:https://www.cnblogs.com/hk-ss/p/12379966.html