Non capisco marathon training

In pratica il problema chiede di trovare uno slice dell’array dove ogni elemento è >= del primo e <= dell’ultimo(chiedo per sicurezza). Ho scritto un programma semplice semplice che fa una sliding window, resettando la window se D[i]<D[l] (l ed r sono i limiti della window), mentre se trovo D[i]>=D[r] aggiorno il risultato e riassegno r a i . Però ho qualche output sbagliato in tutti i subtask, c’è qualche caso che non ho considerato?

#include <iostream>
#include <vector>
#include <cassert>
using namespace std;

int N;
vector<int> D;

int main() {
    cin >> N;
    D.resize(N);
    for (int &d : D) {
        cin >> d;
    }

    int l = 0, i = 1, r=0, ris = 1;
	while(i<N)
	{
		if(D[i]<D[l])
		{
			l = r = i;
		}
		else if(D[i]>=D[r])
		{
			r = i;
			ris = max(ris, i-l+1);
		}
		i++;
	}
    cout << ris << endl;
    return 0;
}

Ecco un caso dove il tuo programma sbaglia:
7
1 7 2 3 4 5 6

1 Mi Piace