Cod sursa(job #769339)

Utilizator igsifvevc avb igsi Data 18 iulie 2012 23:56:27
Problema Elementul majoritar Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.94 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, sw = 1;
	file = fopen("elmaj1.in", "r");
	fscanf(file, "%d", &N);
	for(i = N; i; --i)
		fscanf(file, "%d", &v[i]);
	fclose(file);
	
	for(hsize = N, i = N >> 1; i; --i)
		heapify(i);
		
	
	file = fopen("elmaj.out", "w");
	for(; hsize;)
	{
		if(prev == v[1]) 
			nr++;
		else if(nr > (N >> 1))
		{
			fprintf(file, "%d %d\n", prev, nr);
			sw = 0;
			break;
		}
		else
		{
			nr = 1;
			prev = v[1];
		}
		v[1] = v[hsize--];
		heapify(1);
	}
	if(sw && nr > (N>>1))
		fprintf(file, "%d %d\n", prev, nr);
	else
		fprintf(file, "-1\n");
	fclose(file);
	
	return 0;
}