Я протестировал ваш код в некоторых тестовых примерах, и кажется, что ваш код не работает,
n = 2
1 1
Ответ должен быть True, так как его можно разбить на {1}, {1} и поскольку одиночный Элемент увеличивается, а также уменьшается и то, и другое, ответ верный.
Вот мой код. Объяснение: Вся моя концепция основана на том, что нам нужно проверить, может ли данная последовательность быть разбита на 2 подпоследовательности. Поэтому я сохранил переменную Seq_no для отслеживания, поэтому, если в конце кода, если значение Seq_no не должно превышать 2, также существует вероятность того, что последовательность может быть полностью строго убывающей, поэтому в этом случае, если n не равно 1, то ответ верный.
#include <iostream>
#include <limits.h>
using namespace std;
int main()
{
int n, curr, prev = INT_MAX, Seq_no = 1;
int i;
cin >> n;
for(i = 0; i < n; i++)
{
cin >> curr;
if(Seq_no == 1) // for stricly decreasing
{
if(prev <= curr)
{
Seq_no++;
}
}
else // for stricly decreasing
{
if(prev >= curr)
{
Seq_no++;
break;
}
}
prev = curr;
}
if(Seq_no == 2 || (Seq_no == 1 && n != 1))
cout << "true\n";
else
cout << "false\n";
return 0;
}
Если я решил вашу проблему, то пожалуйста. примите ответ.