Raid - 60/100, troppo lento

Salve, sto cercando di completare raid - tantrum with consequences, ma mi dà soltanto 60/100 poichè il mio codice supera gli 0.8s (facendone 0.9s).
Quali potrebbero essere modi per renderlo più veloce?
In pratica il mio codice per ogni P (con P <= N) cerca i valori che soddisfano la condizione e li trasforma in 0 dopo essere passati al valore successivo. Se in un passaggio totale di P non c’è stato alcun cambio esco dal ciclo e mando a video.
Ogni consiglio è apprezzato, grazie in anticipo

Codice:

  	#include iostream>
	#include vector>
	using namespace std;
		
		int main(){
			unsigned int n, p, temp, cont = 1, c = 1, ris = 0, l, diff = 0;
			cin >> n >> p;
			vector<unsigned int> a, b;
			a.push_back(0);
			while (cont < n +1){
				(void)scanf("%d", &temp);
				a.push_back(temp);
				cont++;
			}
			if (p > n) p = n;
			a.push_back(0);
			temp = 0, l = 0;
			for (cont = 2; cont <= n; cont++){
				if (a[cont] > a[cont - 1]) temp++;
				if (a[cont] < a[cont - 1]) l++;
			}
			if (temp == (n-1) || l == (n-1)){
				printf("%d", p);
			}
			else{
				l = 0;
				for (cont = 0; cont < p; cont++){
					for (c = 1; c <= n; c++){
						if (a[c] > a[c - 1] && a[c] > a[c + 1]){
							a[l] = 0;
							ris++;
							diff++;
							l = c;	
						}
			 		}
					a[l] = 0;
					l = 0;
					if (diff == 0) break;
					else diff = 0;
				}
				printf("%d", ris);
			}
		}

Ciao, una piccola precisazione: il sistema di valutazione stoppa il processo poco dopo che supera il limite di tempo, e questo codice secondo me ci metterebbe un po’ più di 0.9 secondi se non venisse fermato dal momento che ha complessità \mathcal{O}(N \cdot P).
Detto questo bisogna velocizzare il codice: è veramente necessario ricontrollare tutte le altezze delle case ogni volta?
Infatti non tutte le case possono essere abbattute al turno successivo, ma solo alcune, quali?

Grazie delle info,
Presumo solo quelle adiacenti a quelle appena distrutte…

Esattamente \hphantom{a}