Pagini recente » Cod sursa (job #1335808) | Cod sursa (job #1694902) | Cod sursa (job #1067401) | Cod sursa (job #2271888) | Cod sursa (job #1806827)
#include <fstream>
#include <cstdlib>
using namespace std;
const int N=3000001;
int v[N], p;
ifstream in("sdo.in");
ofstream out("sdo.out");
void schimb(int &a, int &b) {
int r=b;
b=a;
a=r;
}
void partitie3(int st, int dr, int &p1, int &p2) {
int i, j, k, piv=v[dr];
i=j;
st=j;
k=dr-1;
while(i<=k) {
if(v[i]<piv) {
schimb(v[i], v[j]);
i++;
j++;
} else if(v[i]==piv)
i++;
else {
schimb(v[i], v[k]);
k--;
}
}
k++;
schimb(v[dr], v[k]);
p1=j;
p2=k;
}
void qs(int st, int dr) {
if(st>=dr)
return;
int p1, p2;
partitie3(st, dr, p1, p2);
if (p < p1) qs(st, p1-1);
if (p > p2) qs(p2+1, dr);
}
int main() {
int i, n, j;
in>>n>>p;
for(i=1; i<=n; i++)
in>>v[i];
for(i=n; i>=1; i--) {
j=1+rand()%i;
schimb(v[i], v[j]);
}
qs(1, n);
out<<v[p];
return 0;
}