Pagini recente » Cod sursa (job #2846807) | Cod sursa (job #456536) | Cod sursa (job #2534122) | Cod sursa (job #1183806) | Cod sursa (job #1371527)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
#define nmax 1000005
using namespace std;
int n, num, nr;
int A[nmax];
int q(int st, int dr) {
int i = st;
int j = dr;
int 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 lo, int hi, int k) {
if (lo == hi) return;
int mid = q(lo, hi);
int len = mid - lo + 1;
if (k <= len)
solve(lo, mid, k);
else
solve(mid+1, hi, k-len);
}
int main() {
srand(time(0));
ifstream fin("elmaj.in");
ofstream fout("elmaj.out");
fin >> n;
for (int i = 1; i <= n; i++)
fin >> A[i];
solve(1, n, n/2);
num = A[n/2];
for (int i = 1; i <= n; i++)
if (A[i] == num)
nr++;
if (nr > n/2)
fout << num << " " << nr << "\n";
else
fout << -1 << "\n";
fin.close();
fout.close();
return 0;
}