Problema abc quadri

Il mio programma è in grado di risolvere tutti i problemi che gli vengono posti (tranne il primo esempio per qualche ragione) e più della metà dei problemi del sub task 5, dove sfora con il tempo (timed out).

Vorrei sapere se nel mio programma è possibile modificare qualcosa per ottimizzare i tempi abbastanza da permettere al mio programma di risolverlo o se ho proprio sbagliato algoritmo.

#include <algorithm>

using namespace std;

int quadri(int N, long long M, int V[]) {
    
    int B = N;

    for(int i=0; i<N-1; i++) { //Controlla se esiste un quadro oltre il massimo, e ritorna subito 0 evitando di calcolare tutto
        if(!(V[i] < M)) return 0; 
    }
    
    for(int i=0; i<N-1; i++) { //Per ogni quadro
        long long int sum=0;
        int newB=0;
        for(int j=i; j<N and sum<M; j++) { //Vedi i successivi finchè non esci
            sum+=V[j];
            if(sum<M) newB++;
        } //J

        B = min(B, newB);
        if(newB == N-i) {if(B != N) B++; break; } //Se arriva alla fine senza problemi, ha trovato il nuovo risultato

    } //I
    return B;
}

Ho cercato di mettere più commenti possibile in modo da semplificare la revisione.
Ringrazio in anticipo per l’aiuto.

UPDATE:
Sono riuscito a risolvere il problema, era l’algoritmo sbagliato, però comunque non riesce a risolvere il primo caso di test. (I calcoli che fa sono gli stessi e danno gli stessi risultati, solo con molti meno passaggi, ma mi piacerebbe sapere perché non riesce a risolvere il primo esempio).
Il primo esempio è:

4 8
1 2 3 4

il mio algoritmo da come risultato 3 anche se il risultato è 2, se qualcuno è in grado di dirmi dove sbaglia il mio algoritmo ne sarei davvero grato.