Cod sursa(job #829587)

Utilizator OpportunityVlad Negura Opportunity Data 5 decembrie 2012 17:10:00
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <stdio.h>

FILE *fi,*fo;
long i,n,k,nr=0,a[1000010];

void readData(){
    fscanf(fi,"%ld",&n);
    k=n/2;
    for (i=1; i<=n; i++) fscanf(fi,"%ld",&a[i]);
}

void q(long l, long r){
long i=l,j=r,p=a[(i+j)/2],aux;
    while (i<j){
        while (a[i]<p) i++;
        while (a[j]>p) j--;
        if (i<=j) { aux=a[i]; a[i]=a[j]; a[j]=aux; i++; j--; }
    }
    if ((j>l)&&(k<=j)) q(l,j); else if (i<r) q(i,r);
}

void writeData(){
    for (i=1; i<=n; i++) if (a[i]==a[k]) nr++;
    if (nr>k) fprintf(fo,"%ld %ld",a[k],nr); else fprintf(fo,"-1");
}

int main()
{
    fi=fopen("elmaj.in","r");
    fo=fopen("elmaj.out","w");

        readData();
        q(1,n);
        writeData();

    fclose(fi); fclose(fo); return 0;
}