Pagini recente » Cod sursa (job #3293621) | Cod sursa (job #3293762) | Rating catalin petre (Loky) | Cod sursa (job #3293748) | Cod sursa (job #3294454)
#include <bits/stdc++.h>
#define VMAX 102
#define INF 2000000000
using namespace std;
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
vector<int> num;
int n_th_element(vector<int> numere, int cautat) // cautam al x-lea element din vectorul numere
{
int pivot = rand()%numere.size(); // alegem un pivot la nimereala
vector<int> mai_mic, mai_mare; // vectorii cu numerele mai mici, respectiv mai mari
int nr_egali=0; // daca sunt mai multe numere egale cu pivotul
for(int i=0;i<numere.size();i++)
{
if(numere[i]<numere[pivot])
mai_mic.push_back(numere[i]);
else if(numere[i]>numere[pivot])
mai_mare.push_back(numere[i]);
else // numere[i] == numere[pivot]
nr_egali++;
}
if(cautat<mai_mic.size())
return n_th_element(mai_mic, cautat); // numarul cautat e mai mic, deci e in vectorul acesta
else if(cautat<mai_mic.size() + nr_egali) // cautat e mai mare decat nr de numere mai mici si e <= decat numarul de numere cu tot cu cel ales
return numere[pivot]; // am gasit numarul
else
return n_th_element(mai_mare, cautat - mai_mic.size() - nr_egali); // numarul e mai mare, deci va fi al x-lea - cate numere sunt inaintea grupei
}
int main()
{
int n,m,i,j,k,t,q,nr,minim,maxim,suma;
fin>>n>>m;
for(i=0;i<n;i++)
{
fin>>j;
num.push_back(j);
}
srand(time(0));
fout<<n_th_element(num,m-1)<<'\n'; // m-1 pentru ca vectorii vor fi indexati de la 0, nu de la 1
return 0;
}