亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

POJ 2823 Sliding Window (單調隊列的學習)

2019-11-14 10:53:04
字體:
來源:轉載
供稿:網友
An array of size n ≤ 10 6 is given to you. There is a sliding window of size kwhich 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 positionMinimum valueMaximum value
[1  3  -1] -3  5  3  6  7 -13
 1 [3  -1  -3] 5  3  6  7 -33
 1  3 [-1  -3  5] 3  6  7 -35
 1  3  -1 [-3  5  3] 6  7 -35
 1  3  -1  -3 [5  3  6] 7 36
 1  3  -1  -3  5 [3  6  7]37

Your task is to determine the maximum and minimum values in the sliding window at each position. 

InputThe input consists of two lines. The first line contains two integers n and k which are the lengths of the array and the sliding window. There are n integers in the second line. OutputThere are two lines in the output. The first line gives the minimum values in the window at each position, from left to right, respectively. The second line gives the maximum values. Sample Input
8 31 3 -1 -3 5 3 6 7Sample Output
-1 -3 -3 -3 3 3

3 3 5 5 6 7

題目大意:給你一個數組,然后讓從左到右,找到每連續k個數的最大值和最小值并且輸出

題目分析:單調隊列解決,然后用C++卡時間AC,用G++會超時

這個問題相當于一個數據流(數列a)在不斷地到來,而數據是不斷過期的,相當于我們只能保存有限的數據(sliding window中的數據,此題中就是窗口的寬度w),對于到來的查詢(此題中查詢是每時刻都有的),我們要返回當前滑動窗口中的最大值/最小值。注意,元素是不斷過期的。

解決這個問題可以使用一種叫做單調隊列的數據結構,它維護這樣一種隊列:

a)從隊頭到隊尾,元素在我們所關注的指標下是遞減的(嚴格遞減,而不是非遞增),比如查詢如果每次問的是窗口內的最小值,那么隊列中元素從左至右就應該遞增,如果每次問的是窗口內的最大值,則應該遞減,依此類推。這是為了保證每次查詢只需要取隊頭元素。

b)從隊頭到隊尾,元素對應的時刻(此題中是該元素在數列a中的下標)是遞增的,但不要求連續,這是為了保證最左面的元素總是最先過期,且每當有新元素來臨的時候一定是插入隊尾。

滿足以上兩點的隊列就是單調隊列,首先,只有第一個元素的序列一定是單調隊列。

那么怎么維護這個單調隊列呢?無非是處理插入和查詢兩個操作。

對于插入,由于性質b,因此來的新元素插入到隊列的最后就能維持b)繼續成立。但是為了維護a)的成立,即元素在我們關注的指標下遞減,從隊尾插入新元素的時候可能要刪除隊尾的一些元素,具體說來就是,找到第一個大于(在所關注指標下)新元素的元素,刪除其后所有元素,并將新元素插于其后。因為所有被刪除的元素都比新元素要小,而且比新元素要舊,因此在以后的任何查詢中都不可能成為答案,所以可以放心刪除。

對于查詢,由于性質b,因此所有該時刻過期的元素一定都集中在隊頭,因此利用查詢的時機刪除隊頭所有過期的元素,在不含過期元素后,隊頭得元素就是查詢的答案(性質a),將其返回即可。

由于每個元素都進隊出隊一次,因此攤銷復雜度為O(n)。

程序實現過程中先將前k個元素入隊,此后每次在隊尾加入a[k+1...n],在插入元素中同時進行以下操作:

1、將隊尾所有大于a[i]的值彈出隊列

2、插入a[i]到隊尾

3、判斷隊首元素位置是否超出i-k

注意:

1、在更新隊列元素時要同時記錄該元素在原數據的位置

2、在進行操作1時要用二分優化(可以用C++編譯器卡時間AC,但換成G++和GCC就會TLE)

#include <iostream>#include <fstream>#define maxn 1000010using namespace std;int a[maxn],q[maxn],p[maxn],Min[maxn],Max[maxn],n,k;// a是數據,q是隊列,p是存放下標void gmin(){	int tail=0,head=1,i;	for(i=0;i<k-1;i++){		while(head<=tail && q[tail]>=a[i])//若添加的元素小于隊尾元素,符合條件,刪除隊尾元素,直到隊尾元素小于此元素為止 		  --tail;		q[++tail]=a[i];//存放滿足條件的數據 		p[tail]=i;//記錄存儲的數據下標,保證每個窗口所讀入的數據都在k的范圍內 	}	for(;i<n;i++){		while(head<=tail && q[tail]>=a[i])		 --tail;		q[++tail]=a[i];		p[tail]=i;		while(p[head]<i-k+1)//利用查看數據是否過時,即是否在窗口內 		  ++head;	   Min[i-k+1]=q[head];//存放數據答案 	}} void gmax(){	int tail=0,head=1,i;	for(i=0;i<k-1;i++){		while(head<=tail && q[tail]<=a[i])		  --tail;		q[++tail]=a[i];		p[tail]=i;	}	for(;i<n;i++){		while(head<=tail && q[tail]<=a[i])		  --tail;		q[++tail]=a[i];		p[tail]=i;		while(p[head]<i-k+1)		   head++;		Max[i-k+1]=q[head];	}}	void output(){	for(int i=0;i<n-k;i++)	   PRintf("%d ",Min[i]);	   printf("%d/n",Min[n-k]);	for(int i=0;i<n-k;i++)	   printf("%d ",Max[i]);	   printf("%d/n",Max[n-k]);}int main(){	scanf("%d%d",&n,&k);	for(int i=0;i<n;i++)	  scanf("%d",&a[i]);	gmin();	gmax();	output();	return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久一区二区三区| 欧美日韩另类视频| zzijzzij亚洲日本成熟少妇| 久久久av亚洲男天堂| 国产成人在线播放| 亚洲欧洲国产精品| 91高清视频免费| 亚洲第一福利视频| 亚洲欧美另类自拍| 欧美精品在线播放| 在线观看国产精品淫| 俺去亚洲欧洲欧美日韩| 欧美大码xxxx| 亚洲欧美日韩成人| 国产午夜精品全部视频播放| 久久99精品国产99久久6尤物| 一本色道久久综合狠狠躁篇怎么玩| 国产精品入口夜色视频大尺度| 亚洲第一网站男人都懂| 亚洲人成伊人成综合网久久久| 亚洲精品久久视频| 成人国产亚洲精品a区天堂华泰| 久久在线免费视频| 57pao国产精品一区| 国产精品视频精品视频| 亚洲精品98久久久久久中文字幕| 欧美精品videosex性欧美| 成人网欧美在线视频| 日韩欧美在线视频| 18性欧美xxxⅹ性满足| 国产美女久久久| 日本精品一区二区三区在线播放视频| 欧美黄色片在线观看| 九九热这里只有在线精品视| www日韩欧美| 中文字幕免费国产精品| 国产91对白在线播放| 欧美国产日韩中文字幕在线| 国产亚洲欧美aaaa| www.美女亚洲精品| 欧美xxxx18性欧美| 国产精品综合不卡av| 国产性猛交xxxx免费看久久| 亚洲精品国产电影| 久久97精品久久久久久久不卡| 91日本在线视频| 2019日本中文字幕| 久久影院免费观看| 国产精国产精品| 欧美高清一级大片| 日韩精品在线视频美女| 成人免费激情视频| 这里只有精品丝袜| 欧美在线一级视频| 九九热这里只有精品免费看| 亚洲一区二区在线| 亚洲图片欧美日产| 久久精品视频在线| 午夜美女久久久久爽久久| 国产精品mp4| 亚洲欧美中文字幕| 日韩久久免费视频| 岛国视频午夜一区免费在线观看| 国语自产精品视频在线看| 91在线播放国产| 欧美成人免费网| 91高清在线免费观看| 国内精品久久久久久影视8| 精品欧美一区二区三区| 4444欧美成人kkkk| 亚洲精品福利在线| 欧美性xxxx极品hd欧美风情| 欧美一性一乱一交一视频| 欧美黑人极品猛少妇色xxxxx| 亚洲欧美中文字幕在线一区| 国产伦精品一区二区三区精品视频| 日韩一区在线视频| 欧美中文字幕在线| 亚洲国产精品热久久| 色多多国产成人永久免费网站| 日韩在线免费视频观看| 成人淫片在线看| 国产精品久久不能| 中文国产成人精品久久一| 久久91亚洲人成电影网站| 97精品视频在线| 国产精品欧美日韩一区二区| 久久香蕉频线观| 亚洲系列中文字幕| 97国产真实伦对白精彩视频8| 日韩在线中文字幕| 日韩精品亚洲视频| 中文字幕精品一区二区精品| 亚洲色图激情小说| 国产91在线播放| 国产精品电影在线观看| 黄色成人av在线| 国产精品大陆在线观看| 国产精品久久久久久五月尺| 国产精品国产自产拍高清av水多| 国产亚洲一区精品| 国产一区二区三区高清在线观看| 北条麻妃99精品青青久久| 国产精品一区专区欧美日韩| 福利一区视频在线观看| 一区国产精品视频| 亚洲欧美精品一区二区| 97av在线视频免费播放| 欧美理论在线观看| 国产欧美精品日韩精品| 日韩中文在线观看| 欧美精品久久一区二区| 伦理中文字幕亚洲| 国产精品成熟老女人| 午夜免费日韩视频| 亚洲精品久久久久久久久久久久久| 国产成人精品一区二区三区| www.久久色.com| 国产欧美va欧美va香蕉在线| 成人中文字幕在线观看| 在线观看欧美日韩国产| 亚洲一区二区中文| 精品国产精品三级精品av网址| 国产91精品网站| 欧美成年人网站| 欧美大片在线影院| 45www国产精品网站| 亚洲人成网站在线播| 日韩欧美成人区| 欧美日韩激情视频| 久久免费在线观看| 久久在精品线影院精品国产| 中文字幕精品久久| 欧美另类69精品久久久久9999| 茄子视频成人在线| 精品久久久久久中文字幕| 亚洲天堂2020| 日韩欧美在线免费观看| 久久久精品2019中文字幕神马| 欧美日韩成人在线视频| 51色欧美片视频在线观看| 欧美刺激性大交免费视频| 97碰在线观看| 宅男66日本亚洲欧美视频| 亚洲精品第一国产综合精品| 亚洲精品国产精品自产a区红杏吧| 日韩精品一区二区三区第95| 欧美午夜宅男影院在线观看| 亚洲激情视频网| 日韩欧美亚洲一二三区| 7m精品福利视频导航| 色yeye香蕉凹凸一区二区av| 中文字幕日韩精品在线| 羞羞色国产精品| 久久精品成人一区二区三区| 伊人青青综合网站| 国产精品96久久久久久又黄又硬| 成人在线精品视频| 亚洲午夜av电影| 亚洲国产精品成人一区二区| 欧美精品免费在线| 国产亚洲成av人片在线观看桃| 日本免费一区二区三区视频观看| 91成人天堂久久成人|