現在有一堆數字共n個數字(n<=10^6),以及乙個大小為k的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。
例如:the array is [1 3 -1 -3 5 3 6 7], and k = 3.
輸入格式:
輸入一共有兩行,第一行為n,k。
第二行為n個數(輸出共兩行,第一行為每次視窗滑動的最小值
第二行為每次視窗滑動的最大值
輸入樣例#1:
8 31 3 -1 -3 5 3 6 7
輸出樣例#1:
-1 -3 -3 -3 3 33 3 5 5 6 7
50%的資料,n<=10^5
100%的資料,n<=10^6
單調佇列維護最大最小值
1 #include2 #include3 #include4 #include5using
namespace
std;
6const
int maxn=10000001;7
int read(int &n)815
while(c>='
0'&&c<='9'
)1620if(flag==1)n=-x;
21else n=x;22}
23int
n,m;
24int
a[maxn];
25int q[maxn],p[maxn],h=0,t=0;26
void
find_min()
2741 printf("\n"
);42}43
void
find_max()
4459 printf("\n"
);60}61
intmain()
62
P1886 滑動視窗
現在有一堆數字共n個數字 n 10 6 以及乙個大小為k的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。例如 the array is 1 3 1 3 5 3 6 7 and k 3.輸入格式 輸入一共有兩行,第一行為n,k。第二行為n個數 輸出格式 輸出...
P1886 滑動視窗
有乙個長為n的序列a,以及乙個大小為k的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。例如 the array is 1,3,1,3,5,3,6,7 and k 3。輸入格式 輸入一共有兩行,第一行有兩個正整數 n,kn,k。第二行 nn 個整數,表示序列...
P1886 滑動視窗
現在有一堆數字共n個數字 n 10 6 以及乙個大小為k的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。例如 the array is 1 3 1 3 5 3 6 7 and k 3.輸入一共有兩行,第一行為n,k。第二行為n個數 輸出共兩行,第一行為每次...