В городе имеются различные сигнальные башни. Башни выровнены по прямой горизонтальной линии (слева направо), и каждая башня передает сигнал справа налево. Башня А должна блокировать сигнал Башни В, если Башня A присутствует слева от Башни B, а Башня A выше Башни B. Таким образом, диапазон сигнала данной башни может быть определен как:
{(количество смежных башен слева от данной башни, высота которых меньше или равна высоте данной башни) + 1}.
#include <iostream>
#include <vector>
using namespace std;
vector<int> res;
void recursion(int a[],int x)
{
if (x >= 0)
{// Taking the last element of the array as the max element
int max = a[x], count = 0;
for (int i = x; i >= 0; i--)
{//Comparing the max with all the elements in the array
if (max >= a[i])
{
count++;
}
else
{
break;
}
}
//Pushing the count of the current element in the vector.
res.push_back(count);
x = x - 1;
recursion(a, x);
}
}
int main() {
int TestCase, n;
cin >> TestCase;
for (int l = 0; l < TestCase; l++)
{
cin >> n;
int * arr = new int[n];
//Getting the elements
for (int j = 0; j < n; j++)
{
cin >> arr[j];
}
recursion(arr, n-1);
//Iterating through the vector in reverse manner and printing
//the result.
for (auto it = res.rbegin(); it != res.rend(); ++it)
{
cout << *it << " ";
}
delete[] arr;
}
return 0;
}
Первая строка содержит целое число T, указывающее количество тестовых случаев.
Вторая строка содержит целое число n, указывающее количество башен.
Третья строка содержит n целых чисел, разделенных пробелом (H [i]), обозначающих высоту
каждой башни.
Печать диапазона каждой башни (разделенного пробелом).
Пример ввода :
1
7
100 80 60 70 60 75 85
Пример вывода :
1 1 1 2 1 4 6
Мое решение верное, но проблема заключается в сложности времени. Есть ли способ уменьшить сложность времени?