Cod sursa(job #799728)

Utilizator RaileanuCristian Raileanu Raileanu Data 19 octombrie 2012 21:42:31
Problema Elementul majoritar Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;
const int maxn=1000010;
int n, st[maxn],dr[maxn], nr[maxn], val[maxn], v,v1,nrmax, indmax, nrnod,i,j;

ifstream f1("elmaj.in");
ofstream f2("elmaj.out");

void cauta(int nod, int x) {
        if (x==val[nod]) {nr[nod]++; if (nr[nod]>=n/2+1) indmax=nod; } else
            if (x<val[nod]) {
                if (st[nod]) cauta(st[nod],x);
                    else { nrnod++; st[nod]=nrnod; val[nrnod]=x; nr[nrnod]=1; }; }
                    else if (dr[nod]) cauta(dr[nod],x);
                        else {nrnod++; dr[nod]=nrnod; val[nrnod]=x; nr[nrnod]=1; }; }

int main() {
        f1>>n;
        f1>>v; nrnod=1; val[1]=v; nr[1]=1;
        for (i=2; (i<=n) & (!indmax); i++)
            { f1>>v;
              cauta(1,v); };
        if (indmax) {
            if (i<=n)
                for (j=i, v1=val[indmax], nrmax=nr[indmax]; j<=n; j++)
                   { f1>>v;
                    if (v1==v) nrmax++; }
            f2<<v1<<" "<<nrmax; }
            else f2<<-1;
        return 0;}