日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

A - Sliding Window POJ - 2823

發(fā)布時間:2024/4/17 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 A - Sliding Window POJ - 2823 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://poj.org/problem?id=2823// 原題鏈接

?

?

題目大意,就是輸出每個相鄰 (i,i+k+1)區(qū)間中的最大值

/// 單調(diào)隊列練習

?

?

1 #include <algorithm> 2 #include <stack> 3 #include <istream> 4 #include <stdio.h> 5 #include <map> 6 #include <math.h> 7 #include <vector> 8 #include <iostream> 9 #include <queue> 10 #include <string.h> 11 #include <set> 12 #include <cstdio> 13 #define FR(i,n) for(int i=0;i<n;i++) 14 #define MAX 2005 15 #define mkp pair <int,int> 16 using namespace std; 17 #pragma comment(linker, "/STACK:10240000000,10240000000") 18 const int maxn = 1e6+5; 19 typedef long long ll; 20 const int inf = 0x3fffff; 21 void read(int &x) { 22 char ch; bool flag = 0; 23 for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || 1); ch = getchar()); 24 for (x = 0; isdigit(ch); x = (x << 1) + (x << 3) + ch - 48, ch = getchar()); 25 x *= 1 - 2 * flag; 26 } 27 int val[maxn]; 28 int Min[maxn],Max[maxn]; 29 int id[maxn],path[maxn]; 30 int main() { 31 int n,m; 32 while(~scanf("%d%d",&n,&m)){ 33 vector <int> r1; 34 vector <int> r2; 35 for(int i=0;i<n;i++)read(val[i]); 36 int tail = 1, ed = 0; 37 int head = 1, sd = 0; 38 for(int i=0;i<m-1;i++){ 39 while(val[i]<=Min[ed]&&tail<=ed){ 40 --ed; 41 } 42 43 while(val[i]>=Max[sd]&&head<=sd){ 44 --sd; 45 } 46 path[++sd]=i; 47 Max[sd]=val[i]; 48 49 id[++ed]=i; 50 Min[ed]=val[i]; 51 52 } 53 // r2.push_back(Max[head]); 54 // r1.push_back(Min[tail]); 55 for(int i=m-1;i<n;i++){ 56 //for(int j=tail;j<=ed;j++)printf("%d ",Min[j]); 57 // puts(""); 58 while(val[i]<=Min[ed]&&tail<=ed){ 59 ed--; 60 } 61 62 63 while(val[i]>=Max[sd]&&head<=sd){ 64 sd--; 65 } 66 67 path[++sd]=i; 68 Max[sd]=val[i]; 69 while(i-path[head]+1>m)head++; 70 r2.push_back(Max[head]); 71 72 id[++ed]=i; 73 Min[ed]=val[i]; 74 while(i-id[tail]+1>m) 75 { 76 tail++; 77 } 78 r1.push_back(Min[tail]); 79 } 80 int siz = r1.size(); 81 for(int i=0;i<siz;i++){ 82 printf("%d%c",r1[i],(i==(siz-1)?'\n':' ')); 83 } 84 for(int i=0;i<siz;i++){ 85 printf("%d%c",r2[i],(i==(siz-1)?'\n':' ')); 86 } 87 } 88 return 0; 89 } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/DreamKill/p/9427727.html

總結

以上是生活随笔為你收集整理的A - Sliding Window POJ - 2823的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。