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?

1 Mi Piace

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

Esattamente \hphantom{a}