POJ 2823 Sliding Window
来源:互联网 发布:hr抢购软件 编辑:程序博客网 时间:2024/06/05 14:12
单调队列实现询问最小值与最大值
#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <iostream>using namespace std;const int maxn=1e6+6;int a[maxn],b[maxn],c[maxn],que[maxn],pos[maxn];int n,k;void Get_min(){//单调队列求每连续k个数的最小值int head=1,tail=0;int i;for(i=0;i<k-1;i++){while(head<=tail && que[tail]>=a[i])--tail;que[++tail]=a[i];pos[tail]=i;}for(;i<n;i++){while(head<=tail && que[tail]>=a[i])--tail;que[++tail]=a[i];pos[tail]=i;while(pos[head]<i-k+1){head++;}b[i-k+1]=que[head];}}void Get_max(){//单调队列求每连续k个数的最大值int head=1,tail=0;int i;for(i=0;i<k-1;i++){while(head<=tail && que[tail]<=a[i])--tail;que[++tail]=a[i];pos[tail]=i;}for(;i<n;i++){while(head<=tail && que[tail]<=a[i])--tail;que[++tail]=a[i];pos[tail]=i;while(pos[head]<i-k+1){head++;}c[i-k+1]=que[head];}}int main(int argc, char const *argv[]){while(~scanf("%d %d",&n,&k)){for(int i=0;i<n;i++){scanf("%d",&a[i]);}Get_min();Get_max();for(int i=0;i<=n-k;i++){printf("%d%c",b[i],i==n-k?'\n':' ');}for(int i=0;i<=n-k;i++){printf("%d%c",c[i],i==n-k?'\n':' ');}}return 0;}
阅读全文
0 0
- 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)
- 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
- POJ 2823 Sliding Window
- leetcode 466. Count The Repetitions
- 用php代码获取机器的ip地址
- openssh-server
- Mybatis中使用oracle的模糊查询的SQL语句写法
- Compile and build specific Hadoop source code branch using Azure VM
- POJ 2823 Sliding Window
- Jvm内存溢出的几种情况
- springMVC常用注解
- hadoop源码编译、配置安装、测试
- (四)php参考手册---php数组
- Javascript赋值语句中的“&&”操作符和"||"操作符
- 数据库索引
- HTC Vive VR房产项目开发四(切换家具样式)
- maven实战(九)使用Cargo实现自动化部署