Задача Рассмотрим последовательность целых чисел длины N. По ней с шагом 1 двигается “окно” длины K, то есть сначала в “окне” видно первые K чисел, на следующем шаге в “окне” уже будут находиться K чисел, начиная со второго, и так далее до конца последовательности. Требуется для каждого положения “окна” определить минимум в нём.
Входные данные Впервой строке входных данных содержатся два числа N и K (
) – длины последовательности и “окна”, соответственно. На следующей строке находятся N чисел – сама последовательность.
Выходные данные Выходные данные должны содержать
строк – минимумы для каждого положения “окна”.
Ограничение по времени, сек: 1
Ограничение по памяти, мегабайт: 64ПроблемаМой код "не влазит" в ограничение по времени (1,8 сек). Подскажите, пожалуйста, как улучшить алгоритм. Мой алгоритм прост: пройти по последовательности с окном, каждый раз находя в окне min.
#include <iostream>
using namespace std;
int main()
{
int N, K, min = 2147483647;
cin >> N >> K;
int *arr = new int[N];
for (int i = 0; i<N; ++i)
cin >> arr[i];
for (int i = 0; i < N-K+1; ++i)
{
min = 2147483647;
for (int j = i; j < i+K ; ++j)
{
if (min>arr[j])
min = arr[j];
}
cout << min << endl;
}
return 0;
}