Problema spectacolelor in limbajul C(metoda Greedy)

#include<stdio.h>

int n,inceput[100],sfarsit[100],nr[100];

void citeste();
void sorteaza();
void rezolva();

int main()
{
freopen("spectacole.in","r",stdin);
freopen("spectacole.out","w",stdout);

citeste();
sorteaza();
rezolva();

fclose(stdin); fclose(stdout);
return 0;
}

void rezolva()
{
int ultim,i;
for(ultim = 0,i = 1; i < n; i++)
if(inceput[nr[i]] >= sfarsit[nr[ultim]]) // selectam spectacolul ce ne avantajeaza
{
printf("%d ",nr[i]+1); ultim = i;
}
printf("\n");

}

void sorteaza() //ordonam crescator spectacolele dupa ora de final
{
int schimb,i,aux;
do
{
schimb = 0;
for(i = 0; i < n-1; i++)
if(sfarsit[nr[i]] > sfarsit[nr[i+1]])
{
aux = nr[i];
nr[i] = nr[i+1];
nr[i+1] = aux;
schimb = 1;
}
}while(schimb);
}

void citeste()
{
int i,m,h;
scanf("%d",&n);
for(i = 0; i < n; i++)
{
nr[i] = i+1;
scanf("%d %d",&h,&m);
inceput[i] = h * 60 + m; //pentru fiecare spectacol transformam ora de inceput in minute

scanf("%d %d",&h,&m); //pentru fiecare spectacol transformam ora de sfarsit in minute
sfarsit[i] = h * 60 + m;
}
}