Pagini recente » Cod sursa (job #488386) | Cod sursa (job #1263445) | Cod sursa (job #2331469) | Cod sursa (job #1285116) | Cod sursa (job #2083370)
#include<cstdio>
#include<cstdlib>
#include<ctime>
#define MAX_N 1000000
using namespace std;
int v[MAX_N], n;
int main() {
int Begin, End, b, e, pivot, ap, i, k, aux;
FILE *fin, *fout;
fin = fopen("elmaj.in","r");
fout = fopen("elmaj.out","w");
fscanf(fin,"%d",&n);
for(i = 0; i < n; i++)
fscanf(fin,"%d",&v[i]);
Begin = 0;
End = n - 1;
k = n / 2;
srand(time(NULL));
while(Begin < End) {
b = Begin;
e = End;
pivot = v[Begin + rand()%(End-Begin+1)];
while(b <= e) {
while(v[b] < pivot) b++;
while(v[e] > pivot) e--;
if(b <= e) {
aux = v[b];
v[b] = v[e];
v[e] = aux;
b++;
e--;
}
}
if(k <= e)
End = e;
else if(k >= b)
Begin = b;
else Begin = End = k;
}
for(ap = 0, i = 0; i < n; i++)
if(v[i] == v[k])
ap++;
if(ap > n / 2)
fprintf(fout,"%d %d\n",v[k],ap);
else fprintf(fout,"-1\n");
fclose(fin);
fclose(fout);
return 0;
}