Cod sursa(job #1867829)

Utilizator anderut22Sandu Andrei anderut22 Data 4 februarie 2017 12:56:56
Problema Elementul majoritar Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <algorithm>
#define DMAX 1000000
using namespace std;
ifstream cin("elmaj.in");
ofstream cout("elmaj.out");
struct sir
{
    long long element;
    int aparitii;
};
sir v[DMAX];
long long x;
int elemente=1, n;
int bsearch(long long x);
bool criteriu1(sir a, sir b)
{
    return a.element>b.element;
}
bool criteriu2(sir a, sir b)
{
    return a.aparitii>b.aparitii;
}
int main()
{
    int i, x, locatie;
    cin >> n;
    cin >> v[0].element;
    v[0].aparitii=1;
    for (i=2; i<=n; i++)
    {
        cin >> x;
        locatie=bsearch(x);
        if (locatie>=0) v[locatie].aparitii++;
            else
            {
                elemente++;
                v[elemente-1].element=x;
                v[elemente-1].aparitii=1;
                sort (v, v+elemente, criteriu1);
            }
    }
    sort (v, v+elemente, criteriu2);
    if (v[0].aparitii>=(n/2)+1)
    {
        cout << v[0].element<< ' '<< v[0].aparitii;
        return 0;
    }
    else
    {
        cout << "-1";
        return 0;
    }
}
int bsearch(long long x)
{
    int st, dr, mid;
    st=-1;
    dr=elemente-1;
    while (dr-st>1)
    {
        mid=(dr+st)/2;
        if (x<v[mid].element) st=mid;
            else dr=mid;
    }
    if ((dr<elemente)&&(x==v[dr].element))
        return dr;
        else return -1;
}