Pagini recente » Cod sursa (job #240303) | Cod sursa (job #305626) | Cod sursa (job #733346) | Cod sursa (job #1939704) | Cod sursa (job #760807)
Cod sursa(job #760807)
#include<fstream>
#include<algorithm>
#define nmax 1000007
using namespace std;
ifstream fin("elmaj.in");
ofstream fout("elmaj.out");
int N, v[nmax], K, gasit = 0, nr;
bool verifica(int x)
{
nr = 0;
for(int i = 1; i <= N; i++)
if(v[i] == x)
nr++;
if(nr>=N/2)
return true;
return false;
}
void qsort(int p, int q, int K)
{
int piv = rand() %(q - p + 1) + p;
swap(v[piv], v[p]);
int st = p ;int dr = q;
int x = v[st];
if(verifica(x))
{
fout << x << " " <<nr;
gasit = 1;
return;
}
while(st<dr)
{
for(; st<dr && x<= v[dr]; --dr);
v[st] = v[dr];
for( ; st< dr && x>= v[st]; ++st);
v[dr] = v[st];
}
v[st] = x;
int pozpiv = st;
if(K> pozpiv)
qsort(pozpiv+ 1 , dr, K - pozpiv);
if(K< pozpiv)
qsort(st, pozpiv - 1, K);
}
void read()
{
fin >>N;
K=N/2;
for(int i = 1; i <= N; i++)
fin>> v[i];
qsort(1,N, K);
if(!gasit)
fout << -1;
}
int main()
{
read();
fin.close();
return 0;
}