以下是代码:
#include <iostream>
using namespace std;
const int N = 2e6 + 1;
int main()
{
ios::sync_with_stdio(false);
long long n, m, a[N]{}, min = 0xffffff, p = 0;
cin >> n >> m;
for (int i = 0; i < n; i++)cin >> a[i];
cout << 0 << endl;
for (int i = 1; i < n; i++)
{
if (i - m <= 0)
{
min = (min >= a[i - 1] ? a[i - 1] : min);
p = (min >= a[i - 1] ? i : p);
cout << min << endl;
}
else if (p <= i - m)
{
min = 0xffffff;
for (int j = i - m; j < i; j++)
{
min = (min >= a[j] ? a[j] : min);
p = (min >= a[j] ? j : p);
}
cout << min << endl;
}
else
{
min = (min >= a[i] ? a[i] : min);
p = (min >= a[i] ? i : p);
cout << min << endl;
}
}
return 0;
}
还有4个点WA,2个点TLE……(换scanf/printf也不行) 方法只是对模拟的优化,省去了部分重复查找最小值的过程