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 ...
随机推荐
- bzoj 1627: [Usaco2007 Dec]穿越泥地【bfs】
在洛谷上被卡了一个点开了O2才过= = bfs即可,为方便存储,把所有坐标+500 #include<iostream> #include<cstdio> #include&l ...
- AutoCAD VBA添加菜单
# 给cad添加自定义菜单 Private Sub AddBar() Dim NewMenuItem As AcadPopupMenuItem Dim TheMacro As String Dim M ...
- 使用nginx加zuul配置
配置文件 $ ls -lrt -rw-r--r-- 1 root root 826 May 10 10:56 nginx.conf $ pwd /etc/nginx 增加配置 在http {}里 up ...
- redis实际项目作用
我整理一下redis主要在项目作用,只是我接触到的 1 手机验证码存入redis中,可以限制什么时候有效 2 防止接口请求频率过高,例如一分钟只能请求5次 代码如下: <?php /** * ...
- 【转】数据倾斜是多么痛?spark作业/面试/调优必备秘籍
原博文出自于: http://sanwen.net/a/gqkotbo.html 感谢! 来源:数盟 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性 ...
- 13 继续C#中的方法,带返回值的方法介绍
在这一个练习中,我们要使用带返回值的方法.如果一个方法带返回值,那么它的形式是这样的. 定义一个带返回值的C#方法 static 返回类型 方法名字 (参数类型 参数1的名字,参数类型 参数2的名字) ...
- Python在云端编程之IPython notebook
Python在云端编程之IPython notebook 如果本地编程考虑到Python版本,机器位数,编译环境,科学栈安装等等繁琐的事,弄得你焦头烂额,不如移步云端,省去这些繁琐过程,在云端编程是很 ...
- viewpager滑动时页面不能刷新
有一种解决方法就是覆盖PagerAdapter中的getItemPosition()方法,这种方案虽然简单,但是因为这种方法是让每次呼叫PagerAdapter时,都会遍历childView,通过ge ...
- CAD使用GetxDataString读数据(网页版)
主要用到函数说明: MxDrawEntity::GetxDataString2 读取一个字符扩展数据,详细说明如下: 参数 说明 [in] LONG lItem 该值所在位置 [out, retval ...
- 关于ORB SLAM2资源整理(持续更新)
ORB SLAM2源码讲解(吴博) https://www.youtube.com/watch?v=2GVE7FTW7AU 泡泡机器人视频整理: http://space.bilibili.com/3 ...