poj 2823单调队列模板题
#include<stdio.h>//每次要吧生命值长的加入,吧生命用光的舍弃
#define N 1100000
int getmin[N],getmax[N],num[N],n,k,a[N];
int main(){
int i,first,last;
while(scanf("%d%d",&n,&k)!=EOF) {
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
first=1;last=1;
getmin[first]=a[1];
num[first]=1;
for(i=2;i<=k;i++) {
while(a[i]<=getmin[last]&&first<=last)
last--;
getmin[++last]=a[i];
num[last]=i;
}
printf("%d",getmin[first]);
for(i=k+1;i<=n;i++) {
while(a[i]<=getmin[last]&&first<=last)//碰到相等也要改变因为他生命长
last--;
getmin[++last]=a[i];
num[last]=i;
while(num[first]<i-k+1&&first<=last)//如果没有在要求的范围内就舍弃
first++;
printf(" %d",getmin[first]);
}
printf("\n");
first=1;last=1;
getmax[first]=a[1];
num[first]=1;
for(i=2;i<=k;i++) {
while(a[i]>=getmax[last]&&first<=last)
last--;
getmax[++last]=a[i];
num[last]=i;
}
printf("%d",getmax[first]);
for(i=k+1;i<=n;i++) {
while(a[i]>=getmax[last]&&first<=last)
last--;
getmax[++last]=a[i];
num[last]=i;
while(num[first]<i-k+1&&first<=last)
first++;
printf(" %d",getmax[first]);
}
printf("\n");
}
return 0;
}
//二分法
#include<stdio.h>
struct node {
int index,f;
}pmax[1100000],pmin[1100000];
int a[1100000];
int qiulinjie(int front ,int last,int d) {
int mid;
while(front<=last) {
mid=(front+last)/2;
if(pmin[mid].f==d)
return mid;
else
if(pmin[mid].f>d)
last=mid-1;
else
front=mid+1;
}
return front;
}
int qiulinjie1(int front ,int last,int d) {
int mid;
while(front<=last) {
mid=(front+last)/2;
if(pmax[mid].f==d)
return mid;
else
if(pmax[mid].f<d)
last=mid-1;
else
front=mid+1;
}
return front;
}
int main() {
int front,last,i,j,k,n,m;
while(scanf("%d%d",&n,&k)!=EOF) {
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
front=last=1;
pmin[front].index=1;
pmin[last].f=a[1];
for(i=2;i<=k;i++) {
last=qiulinjie(front,last,a[i]);
pmin[last].index=i;
pmin[last].f=a[i];
}
printf("%d",pmin[front].f);
for(;i<=n;i++) {
last=qiulinjie(front,last,a[i]);
pmin[last].index=i;
pmin[last].f=a[i];
while(i-pmin[front].index>=k)
front++;
printf(" %d",pmin[front].f);
}
printf("\n");
front=last=1;
pmax[front].index=1;
pmax[front].f=a[1];
for(i=2;i<=k;i++) {
last=qiulinjie1(front,last,a[i]);
pmax[last].index=i;
pmax[last].f=a[i];
}
printf("%d",pmax[front].f);
for(;i<=n;i++) {
last=qiulinjie1(front,last,a[i]);
pmax[last].index=i;
pmax[last].f=a[i];
while(i-pmax[front].index>=k)
front++;
printf(" %d",pmax[front].f);
}
printf("\n");
}
return 0;
}
poj 2823单调队列模板题的更多相关文章
- Sliding Window POJ - 2823 单调队列模板题
Sliding Window POJ - 2823 单调队列模板题 题意 给出一个数列 并且给出一个数m 问每个连续的m中的最小\最大值是多少,并输出 思路 使用单调队列来写,拿最小值来举例 要求区间 ...
- caioj 1172 poj 2823 单调队列过渡题
给定一个n个数的数列,从左至右输出每个长度为m的数列段内的最大数. 输入:第一行两个整数n和m( 1<= n <= 20 0000,m<=n).下来给出n个整数. 输出:一行一个整数 ...
- POJ 2823 Sliding Window (模板题)【单调队列】
<题目链接> <转载于>>> > 题目大意: 给你一段序列和一个长为k的窗口,这个窗口从最左边逐渐向右滑,直到滑到最右边,问你,该窗口在滑动的过程中,最大值和 ...
- luoguP1886 滑动窗口(单调队列模板题)
题目链接:https://www.luogu.org/problem/P1886#submit 题意:给定n个数,求大小为k的滑动窗口中最小值和最大值. 思路:单调队列模板题. AC代码: #incl ...
- POJ 2823 单调队列入门水题
最最基础的单调队列题目.一个单增一个单减.还是可以借此好好理解一下单调队列的. #include <stdio.h> #include <string.h> #include ...
- poj 2823 单调队列
思路:裸的单调队列. #include<iostream> #include<cstring> #include<cstdio> #include<algor ...
- hdu3415 单调队列模板题
比较裸的单调队列 先求前缀和,枚举所有结束位置1~n+k即可 #include<iostream> #include<cstdio> #include<cstring&g ...
- POJ 2823 滑动窗口 单调队列模板
我们从最简单的问题开始: 给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k. 要求: f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0 ...
- POJ 2823 Sliding Window(单调队列入门题)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 67218 Accepted: 190 ...
随机推荐
- 题解报告:hdu 5695 Gym Class(拓扑排序)
题目链接:acm.hdu.edu.cn/showproblem.php?pid=5695 Problem Description 众所周知,度度熊喜欢各类体育活动.今天,它终于当上了梦寐以求的体育课老 ...
- Javascript对象基础讲解
1.Object对象详解 javascript 里最基本的数据类型是对象. avaScript里的对象其实是一个无序的属性集合,属性又是一个个的名-值对. 除了字符串,数字,true,false,nu ...
- 仿ofo单车做一个轮播效果
github地址 首先我是利用swiper.js做的,因为这个很强大,哈哈~~,上代码 html很简单 <body> <div class="swiper-containe ...
- 关于css宽高问题
问题:span标签的width和height分别为多少? <!DOCTYPE html> <html> <head> <meta charset=" ...
- python 模块-easygui.buttonbox
2018-03-0315:43:11 ): Yes_or_No = easygui.buttonbox("是否良品?", choices=['Yes', 'No', '退出']) ...
- hashtable的用法
C#中哈希表(HashTable)的用法详解 1. 哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器 ...
- 如何在linux使用nmap端口扫描工具扫描网段内开放的端口
在另一个linux主机上,使用nmap命令即可 ,比如 我在1.1.1.2上开放了端口1111 -A -j ACCEPT 在1.1.1.1上执行 即可查到
- java学习_5_23
Collection接口中定义的方法如下,所有继承自Collection接口的接口(List,Set)的实现类均实现了这些方法. List容器是有序.可重复的,常用的实现类:ArrayList,Lin ...
- java虚拟机(三)--HotSpot 对象
普通对象的创建(不包括数组和class对象): 当虚拟机遇到new指令时,会在常量池中检查是否包含这个类的符号引用(全限定名),通过这个确定是否经过类加载的过程,如果true,为该 对象分配内存,对象 ...
- JavaScipt30(第五个案例)(主要知识点:flex布局)
承接上文,这是第5个案例:这节没什么讲的,随便记录下吧,主要是用了flex布局与transform translateY,js部分和案例1类似. 附上项目链接: https://github.com/ ...