Cod sursa(job #3351078)

Utilizator Teodor-CiprianNica Teodor-Ciprian Teodor-Ciprian Data 16 aprilie 2026 16:31:24
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int MAX_N=3000005;
int A[MAX_N], N, K;

int part(int A[MAX_N],int li,int lf)
{
	int i=li-1,j=lf+1,p=A[li+(rand()%(lf-li+1))];
	while(1)
	{
		do
		{
			i++;
		} while(A[i]<p);

		do
		{
			j--;
		} while(p<A[j]);

		if(i<j)
			swap(A[i],A[j]);
		else
			return j;
	}
	return 0;
}

void sel(int A[MAX_N],int li,int lf,int k)
{
	if(li==lf)
		return;

	int q=part(A, li, lf);
	int t=q-li+1;

	if(t>=k)
		sel(A,li,q,k);
	else
		sel(A,q+1,lf,k-t);
}

int main()
{
	srand(time(NULL));

    fin>>N>>K;
	for(int i=1;i<=N;i++)
		fin>>A[i];

	sel(A,1,N,K);
	fout<<A[K]<<"\n";
	return 0;
}