• 区间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
     
    代码:
     1 #include <iostream>
     2 using namespace std;
     3 int a[1002];
     4 int old[1002];
     5 void Sort(int left,int right)
     6 {
     7     int i,j,t;
     8     if(left > right)
     9     {
    10         return;
    11     }
    12     
    13     t = a[left];
    14     i = left;
    15     j = right;
    16     
    17     while(i != j)
    18     {
    19         while(a[j]>=t && i<j)
    20             j--;
    21         while(a[i]<=t && i<j)
    22             i++;
    23             
    24         int k;
    25         if(i<j)
    26         {
    27             k = a[i];
    28             a[i] = a[j];
    29             a[j] = k;
    30         }
    31     }
    32     
    33     a[left] = a[i];
    34     a[i] = t;
    35     Sort(left,i-1);
    36     Sort(i+1,right);
    37     return;
    38 }
    39 int main()
    40 {
    41     int m,n,i;
    42     cin>>n;
    43     for(i = 0;i < n;i++)
    44     {
    45         cin>>old[i];
    46     }
    47     cin>>m;
    48 
    49     int l,r,k,t,j;
    50     for(i = 0;i < m;i++)
    51     {
    52         cin>>l>>r>>k;
    53         t = l-1;        
    54         for(j = 0;j < r-l+1;j++)      //用另一个数组保存后,再进行排序
    55         {
    56             a[j] = old[t++];
    57         }
    58         
    59         Sort(0,j-1);
    60         cout<<a[j-k]<<endl;
    61     }
    62     return 0;
    63  } 
  • 相关阅读:
    怎样从外网访问内网MongoDB数据库?
    怎样从外网访问内网MySQL数据库?
    怎样从外网访问内网Tomcat?
    怎样从外网访问内网Oracle数据库?
    怎样从外网访问内网WampServer?
    怎样从外网访问内网Jupyter Notebook?
    怎样从外网访问内网RESTful API?
    怎样从外网访问内网WebSphere?
    系统性能测试步骤
    性能相关面试题
  • 原文地址:https://www.cnblogs.com/boyiliushui/p/5176251.html
Copyright © 2020-2023  润新知