Pagini recente » Cod sursa (job #1150051) | Cod sursa (job #284590) | Cod sursa (job #1229374) | Cod sursa (job #1339963) | Cod sursa (job #1618694)
// Element majoritat - O(N)
/*
Idei
1) Vector de frecventa, cauta in frec daca exista
i a.i frec[i] > n/2
2) Daca vectorul ar fi sortat, atunci elementul
majoritar (daca ar aparea de cel putin n/2 ori)
ar fi egal cu elementul din mijloc. Verific daca
elementul din mijloc din vectorul sortat este el. maj.
*/
#include <fstream>
#include <algorithm>
#define Nmax 1000009
using namespace std;
ifstream f("elmaj.in");
ofstream g("elmaj.out");
int N,K,X,v[Nmax];
int main()
{
f>>N;
for(int i=1;i<=N;++i)f>>v[i];
// mai eficient decat o sortare
nth_element(v+1,v+1+N/2,v+1+N);
X=v[N/2+1];
K=0;
for(int i=1;i<=N;++i)
if(v[i]==X)++K;
if(K>=N/2+1)g<<X<<' '<<K<<'\n';
else g<<-1<<'\n';
f.close(); g.close();
return 0;
}