蓝桥杯algo1区间k大数查询

    xiaoxiao2021-03-25  95

       数据量比较大,如果每次划一个区间就排一次序的话,时间一定会消耗很多,所以想一种办法只排一次序,所以把数存到另一个数组中,这个数组从大到小排一次序,原来的数组保持不变,剩下就只需要从大到小在区间中找对应的了。

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; bool cmp(int a,int b) { return a>b; } int main() { int i,j,k,n,m; int a[1000],b[1000]; while(~scanf("%d",&n)) { for(i=0; i<n; i++) { scanf("%d",&a[i]); b[i]=a[i]; } sort(b,b+n,cmp); scanf("%d",&m); int L,R,K; while(m--) { scanf("%d%d%d",&L,&R,&K); j=0; int I; while(K>0) { for(i=L-1;i<R;i++) { if(a[i]==b[j]) { I=a[i]; K--; } } endd: j++; if(j>=n) break; if(b[j]==b[j-1]) goto endd; } printf("%d\n",I); } } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-16404.html

    最新回复(0)