Mai intai trebuie sa te autentifici.
Cod sursa(job #1068839)
Utilizator | Data | 28 decembrie 2013 20:20:32 | |
---|---|---|---|
Problema | Statistici de ordine | Scor | 50 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.65 kb |
#include<fstream>
#define M (l+(r-l)/2)
using namespace std;
const int maxn = 3080000;
int n,a[maxn],k;
int find(int l=1,int r=n,int p=k){
if(l==r && r == k)return a[k];
unsigned i=l,j=r;
unsigned mij = a[M];
do{
while(a[i]<mij)i++;
while(mij<a[j])j--;
if (i<=j){
swap(a[i],a[j]);
i++;
j--;
}
}while(i<=j);
if(l<=j && p<=j && l<=p) return find(l,j,p);
if(i<=r && p<=r && i<=p) return find(i,r,p);
}
main(){
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
};
printf("%d",find());
}