问题:给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
链接:http://lx.lanqiao.cn/problem.page?gpid=T11
我使用了最简单的循环求解:
#include <iostream>
using namespace std;
int main()
{
int n; cin>>n; //n为序列的长度
int a[n+1],c[n+1];
int i,j,z,q;
int m;
for(i=1;i<n+1;i++)
{
cin>>a[i];
}
cin>>m; int b[m]; //m为询问的次数
for(i=1;i<=m;i++)
{
int start,end,k;
int temp;
cin>>start>>end>>k;
for(q=start;q<=end;q++)
{
c[q]=a[q];
}
for(j=start;j<=end;j++)
{
for(z=j+1;z<=end;z++)
{
if(c[j]<c[z])
{
temp=c[j];
c[j]=c[z];
c[z]=temp;
}
}
}
b[i]=c[start+k-1];
}
for(i=1;i<=m;i++)
{
cout<<b[i]<<endl;
}
return 0;
}
思路简单,记录一下我遇到的错误
1.忽视了每次循环排序后对原数组的改变——引入新的数组存放需要排序的地方。
2题目规定的是从1开始数——忽略了每个数组的x[0],从1开始计数。