Pagini recente » Cod sursa (job #2059906) | Cod sursa (job #1855340) | Cod sursa (job #2279497) | Cod sursa (job #1406025) | Cod sursa (job #1410261)
#include <iostream>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#define nmax 1000005
using namespace std;
FILE *fi, *fo;
int n, k;
int A[nmax];
int qs(int st, int dr)
{
int i = st, j = dr, pivot = A[st + rand() % (j - i + 1)];
while (1)
{
for (; A[i] < pivot;) i++;
for (; A[j] > pivot;) j--;
if (i <= j)
swap(A[i++], A[j--]);
else
return j;
}
return 0;
}
void solve(int st, int dr, int k)
{
if (st == dr)
return;
int pos = qs(st, dr);
int len = pos - st + 1;
if (len >= k)
solve(st, pos, k);
else
solve(pos+1, dr, k-len);
}
int main()
{
fi = fopen("elmaj.in","r");
fo = fopen("elmaj.out", "w");
fscanf(fi, "%d", &n);
for (int i = 1; i <= n; i++)
fscanf(fi, "%d", &A[i]);
k = n/2 + 1;
solve(1, n, k);
int rez = 0;
for (int i = 1; i <= n; i++)
if (A[i] == A[k])
rez++;
if (rez >= n/2 + 1)
{
fprintf(fo, "%d", -1);
return 0;
}
fprintf(fo, "%d %d\n", A[k], rez);
fclose(fi);
fclose(fo);
return 0;
}