Cod sursa(job #2253455)

Utilizator b10nd3Oana Mancu b10nd3 Data 4 octombrie 2018 02:21:50
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb

//statistici de ordrine

#include<iostream>
#include<fstream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

using namespace std;

#define MAX 1000005
long long a[MAX];

long long statOrd(int left, int right, int k){
	srand(time(NULL));
	
	while(left!=right){
		int piv=a[rand()%(right-left+1)+left];
		int i=right, j=left;
		
		while(j<=i){
			while(a[i]>piv) i--;
			while(a[j]<piv) j++;
			
			if(j<=i){
				swap(a[i],a[j]);
				i--; j++;
			}
		}
		
		
		if(left<=i && left+k<=i) right=i;
		else if(right>=j){
			left=j;
			k=k-j;
		}
		
	}
	return a[left];
}

int main(){
	ifstream in("elmaj.in");
	int i, n;
	long long x;
	in>>n;
	for(i=0;i<n;i++) in>>a[i];
	in.close();
	
	statOrd(0, n-1, n/2-1);
	x=a[n/2-1];
	
	int ap=0;
	for(i=0;i<n;i++)
	  if(a[i]==x) ap++;
	
	FILE *out=fopen("elmaj.out","w");
	if(ap<=n/2) fprintf(out,"-1");
	else fprintf(out,"%lld %i",x,ap);  
	
	fclose(out);
	return 0;
}