Cod sursa(job #1184067)

Utilizator tudi98Cozma Tudor tudi98 Data 10 mai 2014 23:48:50
Problema Elementul majoritar Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <algorithm>
#include <fstream>
#include <stdlib.h>
#include <time.h>
#define dim 1000001
using namespace std;

int a[dim],n,nr=0;


int part(int l,int r){

    int i=l-1,j=r+1,pivot=a[l+rand()%(r-l+1)];
    while(1){
        do{i++;} while(a[i]<pivot);
        do{j--;} while(a[j]>pivot);
        if(i<j)
            swap(a[i],a[j]);
        else
            return j;
    }
}

void sdo(int l,int r,int k){

    if(l==r) return;
    int q,t;
    q=part(l,r);
    t=q-l+1;
    if(t>=k)
        sdo(l,q,k);
    else
        sdo(q+1,r,k-t);
}


int main(){

    ifstream f("elmaj.in");
    ofstream g("elmaj.out");

    srand(time(NULL));

    int i;
    f >> n;
    for(i=1;i<=n;i++){
        f >> a[i];
    }

    int k=n/2;
    sdo(1,n,k);

    for(i=1;i<=n;i++){
        if(a[i]==a[k]) nr++;
    }

    if(nr==n/2+1) g << a[k] << " " << nr;
    else g << -1;
}