Cod sursa(job #1880837)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 15 februarie 2017 22:31:46
Problema Elementul majoritar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

int N, times, ans;
int array[1000000];

void QuickSort(int v[], int left, int right){

int i,last;

if(left >= right){
    return;
}
swap(v[left], v[(left+right)/2]);
last = left;

for(i = left + 1; i <= right; i++){
    if(v[i] < v[left]){
        swap(v[++last], v[i]);
    }
}
swap(v[left], v[last]);
QuickSort(v, left, last - 1);
QuickSort(v, last + 1, right);
}

int Majority(){

QuickSort(array, 0, N - 1);
int i = 0;

while(i < N){
    int j = i;
    while(j < N && array[j + 1] == array[i]) j++;
    if(j - i + 1 > N / 2){
        times = j - i + 1;
        return array[i];
    }
    i = j + 1;
}
return -1;
}

int main(){

freopen("elmaj.in", "r", stdin);
freopen("elmaj.out", "w", stdout);

scanf("%d", &N);

for(int i = 0; i < N; i++){
    scanf("%d", &array[i]);
}
ans = Majority();
printf("%d %d", ans, times);

return 0;
}