Cod sursa(job #769332)

Utilizator igsifvevc avb igsi Data 18 iulie 2012 23:43:20
Problema Elementul majoritar Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 0.86 kb
#include<stdio.h>

FILE *file;
int N, v[1000001], hsize;

void heapify(int pos)
{
	int next = pos, aux;

	while(1)
	{
		if(pos << 1 <= hsize && v[next] < v[pos<<1])
			next <<= 1;
		if((pos << 1) + 1 <= hsize && v[next] < v[(pos<<1) + 1])
			next = (pos << 1) + 1;
		
		if(next == pos) break;
		aux = v[pos]; v[pos] = v[next]; v[next] = aux;
		pos = next;
	}
}

int main()
{
	int i, nr = 0, prev = 0;
	file = fopen("elmaj.in", "r");
	fscanf(file, "%d", &N);
	for(hsize = N, i = N; i; --i)
	{
		fscanf(file, "%d", &v[i]);
		if(i <= (N >> 1))
			heapify(i);
	}
	fclose(file);
		
	
	file = fopen("elmaj.out", "w");
	for(; hsize;)
	{
		if(prev == v[1]) nr++;
		else if(nr > (N >> 1))
		{
			fprintf(file, "%d %d\n", prev, nr);
			break;
		}
		else
		{
			nr = 1;
			prev = v[1];
		}
		v[1] = v[hsize--];
		heapify(1);
	}
	if(!hsize) fprintf(file, "-1\n");
	fclose(file);
	
	return 0;
}