알고리즘 훈련 구간 k 대수 조회

1339 단어 알고리즘ACM
링크: 클릭 하여 링크 열기
문제 설명
시퀀스 를 지정 합 니 다. 매번 질문 시퀀스 의 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
데이터 규모 와 약정
30% 의 데이터 에 대해 n, m < = 100;
100% 의 데이터 에 대해 n, m < = 1000;
보증 k < = (r - l + 1), 서열 중의 수 < = 106.
 
AC  code:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define MAXN 150100
#define INF 1000000000 
using namespace std;
int a[MAXN],b[MAXN];
int main()
{
	int n,m,l,r,k;
	while(cin>>n)
	{
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
		}
		//sort(a+1,a+1+n);
		cin>>m;
		while(m--)
		{
			cin>>l>>r>>k;
			int cnt=0;
			for(int i=l;i<=r;i++)
			{
				b[++cnt]=a[i];
			}
			sort(b+1,b+cnt+1);
			cout<<b[cnt-k+1]<<endl;
		}
	}
	
	return 0;
}

좋은 웹페이지 즐겨찾기