Cod sursa(job #1367932)

Utilizator remus88Neatu Remus Mihai remus88 Data 2 martie 2015 11:48:35
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
/*
     Statistici de ordine - O(n)
Statistica k a lui v=al k-lea cel mai mic element din v
nth_element(v+1,v+k,v+1+n) //ATENTIE  v+k
     -pune pe pozitia k statistica de ordin k
     *pe poz 1...k-1 elementele mai mici decat v[k]
     *pe poz k+1...n elementele mai mari decat v[k]
          *intr-o ordine aleatoare
     DECI E METODA DE A OBTINE CELE MAI MICI/MARI k ELEMENTE
     FARA A LE SORTA! E MAI RAPID!
*/
#include <fstream>
#include <algorithm> //nth_element();
using namespace std;

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

int n,k,v[1000009];

int main()
{
    f>>n;
    for(int i=1;i<=n;++i)f>>v[i];
    k=(n+1)/2;
    nth_element(v+1, v+k, v+n+1); //ATENTIE  v+k !!!
    int majoritar=v[k];
    int nr=0;
    for (int i=1; i<=n; i++)
        if(v[i]==majoritar)++nr;
    if (nr>=n/2+1) g<< majoritar<< ' ' <<nr<<'\n';
        else g<<-1<<'\n';
    f.close();g.close();
    return 0;
}