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;
}