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 ...
随机推荐
- hadoop2.x 常用端口及定义方法
一 常用端口号 1 HDFS 2 YARN 3 HBase 4 Hive 5 ZooKeeper 二 Web UIHTTP服务 1 对于存在 Web UIHTTP服务的所有 hadoop daemon ...
- [POI2013]POL-Polarization
题目描述 Everyone knew it would only be a matter of time. So what? Faced for years on, a peril becomes t ...
- rman 问题
1. RMAN Repeatedly Fail To Backup Archivelogs with RMAN-20242 Cause: There is a mis-match between th ...
- mybatis之多个对象自动装配问题
因为业务的需要,所以我在一个方法中植入三个对象,但是mybatis并没有自动装配,结果并不是我想的那么美好,还是报错了.报错截图如下: <select id="GetOneBillPa ...
- nginx connect failed (110- Connection timed out) 问题排查
首先排查 ping 下 nginx 与代理服务是否ping 的通,带端口的,telnet 下端口号是否是通的,本次遇到问题为 telnet 发现有台服务器不通,原因是端口未开放
- MSSQLServer知识点总结:DDL(create,alter,drop,declare)-未完整
一.开发环境 Window10 二.开发工具 SQLServer2012 三.数据库的操作 1.创建 (1)方式一:使用默认的配置信息 create database T_mydb2 (2)方式二:自 ...
- 6.12---前提两个对象的成员必须一致,才能将有数据的对象将数据传给反射获取的对象conver(有数据对象,目标对象)
//// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)/ ...
- CF848A From Y to Y
思路1: 每次贪心地选择满足i * (i - 1) / 2 <= k最大的i并从k中减去i * (i - 1) / 2,直至k为0.由于函数x * (x - 1) / 2的增长速度比2x要慢,所 ...
- 生成100个Div
<!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...
- json-server模拟REST API
介绍 可以开启一个服务前端使用 安装 npm i json-server -g 使用 $ json-server db.json -p 3000 // 在文件目录下执行上述命令,开放一个端口3000的 ...