Lotteria di quadri output non corretto

Aiuto, il codice è un semplice sliding windows ma molti casi del 3,4,5 subtask li da proprio errati, non TLE, ecco il codice

int sliding(int v[], int N, int k) {
    int sf=0;
    for (int i=0;i<k;i++){
        sf+=v[i];}
    int sommamax=sf;
    for (int i=k;i<N;i++) {
        sf+=(v[i]-v[i-k]);
        if (sommamax<sf){
            sommamax=sf;
        }
    }
    return sommamax;
}


int quadri(int N, long long M, int v[]){
    int i=0;
    int tr=0;
    int s=0;
    int ma=0;
    for (int i=0;i<N;i++){
        s=s+v[i];
        if (v[i]>ma){
            ma=v[i];
        }
    }
    if (M<ma){
        return 0;
    }
    if (M>s){
        return N;
    }
    while (tr<M){
        i++;
        tr=sliding(v,N,i);
        //cout<<"finestra di "<<i<< " summax "<<tr<<endl;
    }
    i--;
    return i;
}

Ciao, la somma delle opere deve essere minore o uguale al massimale M. Devi quindi sostituire il controllo

while (tr<M){

con

while (tr<=M){

Oltre a ciò, fai attenzione che la somma delle opere può andare in overflow e quindi non è sufficiente usare una variabile di tipo int.