블 루 브리지 컵알고리즘 트 레이 닝구간 k 대수 조회

3784 단어 알고리즘
질문 설명 은 하나의 서열 을 정 합 니 다. 매번 질문 서열 에서 l 번 째 숫자 에서 r 번 째 숫자 에서 K 번 째 로 큰 숫자 는 무엇 입 니까?입력 형식 첫 줄 은 n 을 포함 하여 시퀀스 길 이 를 표시 합 니 다.두 번 째 줄 은 n 개의 정 수 를 포함 하고 주어진 서열 을 표시 합 니 다.세 번 째 는 정수 m 를 포함 하여 질문 개 수 를 나타 낸다.다음 m 줄, 각 줄 의 세 번 째 수 l, r, K 는 질문 서열 이 왼쪽 에서 오른쪽으로 l 번 째 수 에서 r 번 째 수 까지 크 고 작은 K 번 째 큰 수 는 어느 것 인지 나타 낸다.시퀀스 요 소 는 1 부터 레이 블 을 시작 합 니 다.출력 형식 은 모두 m 줄 을 출력 합 니 다. 줄 마다 숫자 를 입력 하여 질문 의 답 을 표시 합 니 다.샘플 입력 5 1, 2, 3, 4, 5, 1, 5, 2, 3, 2 샘플 출력 42 데이터 규모 와 약 정 된 30% 의 데이터, n, m < = 100;100% 의 데이터 에 대해 n, m < = 1000;보증 k < = (r - l + 1), 서열 중의 수 < = 10 ^ 6.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
/** * @author   * */
public class Main {
    /** * @param args */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] arr=new int[n];
        for(int i=0;i<n;i++){
            arr[i]=sc.nextInt();
        }
        int m=sc.nextInt();
        int[][] t=new int[m][3];
        int[] result=new int[m];
        for(int i=0;i<m;i++){
            for(int j=0;j<3;j++){
                t[i][j]=sc.nextInt();
            }
            result[i]=find(arr,t[i][0]-1,t[i][1]-1,t[i][2]);
        }
        for(int i=0;i<m;i++){
            System.out.println(result[i]);
        }
    }
    //   k   
    private static int find(int[] arr,int l,int r,int k){
        ArrayList<Integer> list=new ArrayList<Integer>();
        for(int i=l;i<=r;i++){
            list.add(arr[i]);
        }
        Collections.sort(list);//       
        return list.get(r-k-l+1);
    }
}

좋은 웹페이지 즐겨찾기