Case Time Limit: 5000MS
An array of size
n ≤ 106 is given to you. There is a sliding window of size
k which is moving from the very left of the array to the very right. You can only see the
k numbers in the window. Each time the sliding window moves rightwards by one position. Following is an example:
The array is
[1 3 -1 -3 5 3 6 7], and
k is 3.
Window position | Minimum value | Maximum value |
---|---|---|
[1 3 -1] -3 5 3 6 7 | -1 | 3 |
1 [3 -1 -3] 5 3 6 7 | -3 | 3 |
1 3 [-1 -3 5] 3 6 7 | -3 | 5 |
1 3 -1 [-3 5 3] 6 7 | -3 | 5 |
1 3 -1 -3 [5 3 6] 7 | 3 | 6 |
1 3 -1 -3 5 [3 6 7] | 3 | 7 |
Your task is to determine the maximum and minimum values in the sliding window at each position.
本题数据极其巨大,可能要进行输出优化,否则会超时,具体代码可以参考下面
void Out(int a) //输出一个整型
{
if(a<0)
{
putchar('-');
a=-a;
}
if(a>9)
Out(a/10);
putchar(a%10+'0');
}
注意换行最好用 putchar("\n");
不要使用任何的printf,哪怕只是printf("\n");也会使输出慢十倍
8 3 1 3 -1 -3 5 3 6 7
-1 -3 -3 -3 3 3 3 3 5 5 6 7