Cod sursa(job #2273313)

Utilizator livliviLivia Magureanu livlivi Data 31 octombrie 2018 12:54:06
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include<fstream>
//#include<cstdio>
//#include <cstdlib>
//#include <time.h>
using namespace std;
int v[3000001];
int poz;
ifstream f("sdo.in");
ofstream g("sdo.out");
inline void schimb(int a,int b){
    int aux;
    aux=v[a];
    v[a]=v[b];
    v[b]=aux;
}
int pozitie(int st,int dr){
    int i=st,j=st;
    while(i<dr){
        if (v[i]<v[dr]){
            schimb(i,j);
            j++;
        }
        i++;
    }
    schimb(j,dr);
    return j;
}
void med(int st,int dr){
    if (st>=dr) return;
    int p=pozitie(st,dr);
    if (p==poz){
        //printf ("%d",v[p]);
        g<<v[p];
        poz=-1;
        return ;
    }
    if (p>poz) med(st,p-1);
    else med(p+1,dr);
}
int main(){
    //freopen ("sdo.in","r",stdin);
    //freopen ("sdo.out","w",stdout);
    int n,j;
    int i;
    //scanf ("%d%d",&n,&poz);
    f>>n>>poz;
    for(i=1;i<=n;i++)
        f>>v[i];
        //scanf ("%d",&v[i]);
    //srand(time(NULL));
    for(i=n/2;i<=n;++i){
        j=((long long)i*v[i])%n+1;
        //j = rand()%n + 1;
        schimb(i,j);
    }
    med(1,n);
    if (poz!=-1)
        g<<v[poz];
        //printf ("%d",v[poz]);
    return 0;
}