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

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

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

2019-11-14 11:22:43
字體:
來源:轉載
供稿:網友
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
国产高清在线不卡| 日本韩国欧美精品大片卡二| 欧美亚洲日本网站| 午夜精品久久久久久久99黑人| 成人免费在线网址| 丝袜美腿亚洲一区二区| 97在线视频免费看| 欧美日韩午夜激情| 久久久久久成人| 国产亚洲精品va在线观看| 日本亚洲欧洲色| 在线看日韩av| 欧美一区二区三区艳史| 日韩成人在线视频网站| 国产精品永久免费视频| 久久免费成人精品视频| 中文字幕亚洲自拍| 亚洲精品一区二区在线| 2020国产精品视频| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品香蕉在线观看| 国产精品三级网站| 国产a级全部精品| 18一19gay欧美视频网站| 国产精品久久久999| 日韩成人av在线播放| 日韩中文综合网| 一区二区欧美日韩视频| 欧美夫妻性生活xx| 亚洲深夜福利网站| 91精品国产乱码久久久久久蜜臀| 亚洲人成欧美中文字幕| 欧美电影免费观看电视剧大全| 欧美激情一二区| 日韩av网站导航| 国产在线999| 国产精品 欧美在线| 茄子视频成人在线| 爱福利视频一区| 欧美激情xxxx性bbbb| 伊人久久免费视频| 欧美区二区三区| 亚洲色图35p| 亚洲女人被黑人巨大进入| 国产一区二区三区在线免费观看| 中文字幕国内精品| 亚洲一区二区免费| 国产激情视频一区| 欧美老肥婆性猛交视频| 国产成人涩涩涩视频在线观看| 久久久久久12| 日韩av中文字幕在线播放| 精品国产91久久久久久老师| 97视频在线观看免费高清完整版在线观看| 精品国产鲁一鲁一区二区张丽| 成人黄色中文字幕| 性欧美xxxx视频在线观看| 国产精品jvid在线观看蜜臀| 欧美日本啪啪无遮挡网站| 亚洲第一av在线| 91精品久久久久久久| 国产美女91呻吟求| 欧美激情国产日韩精品一区18| 色阁综合伊人av| 国产成人一区三区| 欧美电影在线观看网站| 岛国av一区二区三区| 亚洲欧美国产精品久久久久久久| 亚洲第一二三四五区| 精品国产精品自拍| 粉嫩老牛aⅴ一区二区三区| 深夜福利日韩在线看| 成人久久精品视频| 亚洲天堂男人天堂女人天堂| 日韩av成人在线观看| 2021久久精品国产99国产精品| 一区二区欧美亚洲| 欧美自拍视频在线| 久久视频在线看| 国产精品永久免费观看| 久久久久久一区二区三区| 欧美一级高清免费| 亚洲日本欧美中文幕| 欧美激情视频一区二区三区不卡| 日本国产一区二区三区| 中文字幕亚洲激情| 亚洲男人天堂九九视频| 亚洲女在线观看| 日韩电影免费观看中文字幕| 91精品国产91久久久久福利| 中文字幕亚洲欧美一区二区三区| 国产精品一区二区女厕厕| 亚洲福利在线播放| 亚洲18私人小影院| 国产视频精品久久久| 国产精品九九久久久久久久| 日韩精品免费在线视频观看| 亚洲自拍偷拍网址| 日韩av网址在线观看| 成人福利视频网| 欧美疯狂xxxx大交乱88av| 欧美大学生性色视频| 日韩欧美高清在线视频| 久久99精品视频一区97| 国产视频精品免费播放| 欧美最近摘花xxxx摘花| 国产日韩欧美影视| 久久全国免费视频| 亚洲奶大毛多的老太婆| 久久这里有精品视频| 亚洲电影免费在线观看| 日韩av一卡二卡| 亚洲欧洲在线观看| 日韩欧美精品免费在线| 色综合老司机第九色激情| 国产日韩综合一区二区性色av| 国产成人久久久| 欧美性猛交xxxx免费看| 成人激情综合网| 久久成人亚洲精品| 亚洲免费人成在线视频观看| 久久精品国产91精品亚洲| 91高清视频免费| 色综合久久中文字幕综合网小说| 国产mv免费观看入口亚洲| 色老头一区二区三区在线观看| 国产在线观看精品一区二区三区| 亚洲国产高清福利视频| 亚洲国产精品一区二区久| 成人免费淫片aa视频免费| 成人伊人精品色xxxx视频| 欧美激情手机在线视频| 久久精品91久久久久久再现| 九九热精品视频在线播放| 久久国内精品一国内精品| 亚洲男人天堂网站| 欧美日韩一区二区三区在线免费观看| 午夜精品三级视频福利| 亚洲人成在线观看网站高清| 久久久久久久亚洲精品| 国产成人精品久久久| 欧美日韩在线影院| 亚洲欧美制服另类日韩| 91色琪琪电影亚洲精品久久| 亚洲国产欧美精品| 成人免费网站在线观看| 日本久久亚洲电影| 综合国产在线视频| 日韩精品免费在线视频| 亚洲精品有码在线| 欧美理论在线观看| 欧美精品久久久久久久久| 视频在线观看一区二区| 国产欧美日韩丝袜精品一区| 亚洲女成人图区| 久久免费少妇高潮久久精品99| 乱亲女秽乱长久久久| www.亚洲免费视频| 亚洲在线第一页| 日韩有码在线播放| 国产精品中文字幕在线观看| 视频直播国产精品| 日韩欧美在线观看视频| 久久综合久中文字幕青草|