Cod sursa(job #2251433)

Utilizator st_marianStoica Marian st_marian Data 1 octombrie 2018 16:55:23
Problema Elementul majoritar Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
///SORTARE VECTOR + ELEMENTUL DIN MIJLOC - INEFICIENT
///SE FACE CU QUICKSELECT
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("elmaj.in");
ofstream fout("elmaj.out");
int n;
vector<int> elem;
void quick_select(int a, int b)
{
    if(a<b)
    {
        if(elem[(a+b)/2]>elem[b])   swap(elem[(a+b)/2], elem[b]);
        int counter=a;
        for(int i=a; i<b; i++)
        {
            if(elem[i]<elem[b]) swap(elem[counter++], elem[i]);
        }
        swap(elem[counter], elem[b]);
        if(counter==n/2)    return;
        if(counter>n/2) quick_select(a, counter-1);
        else quick_select(counter+1, b);
    }
}
int main()
{
    fin>>n;
    for(int i=0; i<n; i++)
    {
        int x;
        fin>>x;
        elem.push_back(x);
    }

    quick_select(0, n-1);
    int candidat=elem[n/2];
    int counter=0;
    for(int i=0; i<elem.size(); i++)
    {
        if(elem[i]==candidat)   counter++;
    }
    if(counter>n/2) fout<<candidat<<' '<<counter<<'\n';
    else fout<<-1<<'\n';
    return 0;
}