Pagini recente » Cod sursa (job #2860499) | Cod sursa (job #2981916) | Cod sursa (job #3196734) | Cod sursa (job #2424397) | Cod sursa (job #1491296)
#include<cstdio>
#include<cstdlib>
#include<ctime>
int n,k,i,j,p,u,mid,v[3001000],x[3001000],y[3001000];
FILE *f,*g;
void chg(int &a,int &b){
int aux=a;
a=b;
b=aux;
}
int sdo(int l,int r){
int p,u,i,j,a,q;
p=u=0;
q=l+rand()%(r-l+1);
for(i=l;i<=r;i++){
if(v[i]<v[q])
x[++p]=v[i];
else if(v[i]==v[q]){
x[++p]=v[i];
a=p;
}
else
y[++u]=v[i];
}
chg(x[a],x[p]);
for(i=l,j=1;i<=r;i++,j++){
if(j<=p)
v[i]=x[j];
else
v[i]=y[j-p];
}
return l+p-1;
}
int main(){
f=fopen("sdo.in","r");
g=fopen("sdo.out","w");
fscanf(f,"%d%d",&n,&k);
srand(time(0));
for(i=1;i<=n;i++){
fscanf(f,"%d",&v[i]);
}
p=1;
u=n;
while(p<=u){
mid=sdo(p,u);
if(mid==k){
fprintf(g,"%d",v[mid]);
return 0;
}
if(mid<k)
p=mid+1;
else
u=mid-1;
}
fclose(f);
fclose(g);
return 0;
}