Cod sursa(job #1367947)

Utilizator remus88Neatu Remus Mihai remus88 Data 2 martie 2015 11:55:21
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 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;
    f>>v[1];
    int majoritar=v[1], nr=1;
    for(int i=2;i<=n;++i)
    {
        f>>v[i];
        if(v[i]==majoritar)nr++;
            else
            {
                --nr;
                if (nr==0)
                {
                    majoritar=v[i];
                    nr=1;
                }
            }
    }

    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;
}