Sliding Window POJ
来源:互联网 发布:java获取 路径 编辑:程序博客网 时间:2024/06/03 15:51
题意:给你n,k,表示n个数,在连续的k个数的区间(从第一个元素开始)中,输出最大值和最小值。
用两个单调队列,一个放最大值一个放最小值。队列里放的是下标。
#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <cmath>#include <queue>#include <vector>using namespace std;const int maxn = 1e6+10;int a[maxn];int minn[maxn],maxx[maxn];int main(){ int n,k; scanf("%d %d",&n,&k); for(int i=0;i<n;i++) scanf("%d",&a[i]); int front1=0,tail1=-1; int front2=0,tail2=-1; int i=0; for(i=0;i<k;i++) { while(front1<=tail1&&a[i]>=a[maxx[tail1]])//要=,尽量取最大的下标 tail1--; maxx[++tail1]=i; while(front2<=tail2&&a[i]<=a[minn[tail2]]) tail2--; minn[++tail2]=i; } printf("%d",a[minn[front2]]); for(;i<n;i++) { while(front2<=tail2&&a[i]<=a[minn[tail2]]) tail2--; minn[++tail2]=i; while(minn[front2]<(i-k+1)) front2++; printf(" %d",a[minn[front2]]); } printf("\n"); printf("%d",a[maxx[front1]]); for(i=k;i<n;i++) { while(front1<=tail1&&a[i]>=a[maxx[tail1]]) tail1--; maxx[++tail1]=i; while(maxx[front1]<(i-k+1)) front1++; printf(" %d",a[maxx[front1]]); } printf("\n"); return 0;}
阅读全文
0 0
- POJ 2823 Sliding Window
- poj 2823 Sliding Window
- poj 2823 Sliding Window
- POJ 2823 Sliding Window
- poj 2838 Sliding Window
- POJ-2823-Sliding Window
- POJ 2823 Sliding Window
- POJ 2823 Sliding Window
- POJ 2823 Sliding Window
- poj 2823 Sliding Window
- POJ 2823(Sliding Window)
- POJ-2823-Sliding Window
- poj 2823 Sliding Window
- POJ 2823 Sliding Window
- POJ 2823 Sliding Window
- Sliding Window poj 2823
- POJ 2823 Sliding Window
- poj 2823 Sliding Window
- Eclipse 积累
- Android修改图片的大小
- Android API:Activity.managedQuery()
- 为IOStream平反
- hssfworkbook写大量数据数据慢
- Sliding Window POJ
- 画子图(add_subplot & subplot)
- C++ string类实现
- Android GPS基础
- Facebook背后的人工智能
- python---字符串、列表、元组
- conversion to dalvik format failed with error 1
- ASP.NET MVC4- 基类构造函数跳转页面
- Android Map申请key