Cod sursa(job #3351083)

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

int partitie(int A[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 select(int A[N],int li,int lf,int kn)
{
	if(li==lf)
		return;

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

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

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

    fin>>n>>k;
	for(int i=1;i<=n;i++)
		fin>>A[i];

	select(A,1,n,k);
	fout<<A[k]<<"\n";

	return 0;
}