Seats (Il codice non funziona)

Non riesco a capire perché non funziona.
Ecco qui il codice:

#include
#include
#define MAX 100000
using namespace std;

/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */
int N,Q;
int treno[MAX];
char t[MAX];
int k[MAX];
int cont = 0;

void TrovaPostoRiservato(int postoRiservato)
{
if(treno[postoRiservato] != -1)
{
cont++;
int PostoRiservatoDaTrovare = treno[postoRiservato];
treno[postoRiservato] = postoRiservato;
TrovaPostoRiservato(PostoRiservatoDaTrovare);
}else if(treno[postoRiservato] == -1)
{
treno[postoRiservato] = postoRiservato;
}
}
int main(int argc, char** argv) {
ifstream in(“input.txt”);
ofstream out(“output.txt”);
in>>N>>Q;

for(int i = 0;i<Q;i++)
{
	in>>t[i]>>k[i];
}
for(int i = 0;i<N;i++)
{
	treno[i] = -1;
}
for(int i = 0;i<Q;i++)
{
	int postoRiservato = k[i];
	if(t[i] == 'b')
	{
		for(int j = 0;j<=postoRiservato;j++)
		{
			if(treno[j] != -1 && j == postoRiservato)
			{
				TrovaPostoRiservato(postoRiservato);
			}
			if(treno[j] == -1)
			{
				treno[j] = postoRiservato;
			}
		}
	}else if(t[i] == 'l')
	{
		treno[postoRiservato] = -1;
	}
}

cout<<cont;
return 0;

}

Il problema del codice riguarda il fatto che un passeggero non sempre si siede nel suo posto, ergo questa parte del codice:

else if(t[i] == ‘l’)
{
treno[postoRiservato] = -1;
}

non è totalmente corretta perché se la persona con postoRiservato=5 trova il posto di numero 0 libero,si siederà in quest’ultimo e, quando si alzerà per andarsene (a meno che arrivi il passeggero di numero 0 a reclamare il proprio posto), bisognerà impostare treno[0] a -1 e non treno[5].