Cod sursa(job #2276653)

Utilizator cezar.plescaCezar Plesca cezar.plesca Data 5 noiembrie 2018 09:14:35
Problema Elementul majoritar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>
#include <fstream>

using namespace std;
 
int V[1000000];
 
void elmaj(int* a,int l,int r, int & maj,int & nb){
	if(r==l){
		maj=a[l];
		nb=1;
		return;
	}
	int mid=(r+l)/2;
	int maj1,nb1,maj2,nb2;
	elmaj(a,l,mid,maj1,nb1);
	elmaj(a,mid+1,r,maj2,nb2);
	if(maj1==maj2){
		maj=maj1;
		nb=nb1+nb2;
	}
	else{
		for(int i=l;i<=mid;i++){
			if(a[i]==maj2)
				nb2++;
		}
		for(int i=mid+1;i<=r;i++){
			if(a[i]==maj1)
				nb1++;
		}
		if(nb1>nb2){
			maj=maj1;
			nb=nb1;
		}
		else{
			maj=maj2;
			nb=nb2;
		}
	}
}


int main () {
    int N;
 
	ifstream fin("elmaj.in");
    ofstream fout("elmaj.out");
 
    fin >> N; 
 
    for (int i = 0; i < N; i++)
        fin >> V[i];
 
	int maj,nb;
	elmaj(V,0,N-1,maj,nb);

	if(nb>=(N/2+1)){
		fout << maj << " " << nb;
	}
	else{
		fout << "-1";
	}

	fin.close();
    fout.close();
	
	return 0;
}