传送门

题意

有一个数列a,要求你求数列b和c,b[i]是a[i]…a[i+w-1]中的最小值,c[i]是最大值。如果a是1,3,-1,-3,5,3,6,7,则b为-1,-3,-3,-3,3,3,c为3,3,5,5,6,7。

分析

单调队列裸题,不过第一次写单调队列发现了很多trick

代码

#include <bits/stdc++.h>
using namespace std; #define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
#pragma comment(linker, "/STACK:102400000,102400000")
inline void read(int &x){x=0; char ch=getchar();while(ch<'0') ch=getchar();while(ch>='0'){x=x*10+ch-48; ch=getchar();}} int a[1001000],n,k,l,r,b[1001000];
pair<int,int>q[1001000];//1
int main()
{
//freopen("data.in","r",stdin);
//freopen("wa.out","w",stdout);
while(scanf("%d %d",&n,&k)==2)
{
R(i,0,n) scanf("%d",a+i);
l=r=0;
q[r++]=make_pair(0,a[0]);
R(i,1,k)
{
while(r&&a[i]<=q[r-1].second) r--;//2
q[r++]=make_pair(i,a[i]);
}
b[1]=q[l].second;
R(i,k,n)
{
while(r&&a[i]<=q[r-1].second) r--;
l=min(l,r);//3
q[r++]=make_pair(i,a[i]);
while(i-k>q[l].first-1) l++;//4
//printf("l=%d r=%d\n",l,r);
b[i-k+2]=q[l].second;
}
// R(i,0,r) printf("%d%c",q[i].second,i==r-1?'\n':' ');
F(i,1,n-k+1) printf("%d%c",b[i],i==n-k+1?'\n':' ');
l=r=0;
q[r++]=make_pair(0,a[0]);
R(i,1,k)
{
while(r&&a[i]>=q[r-1].second) r--;
q[r++]=make_pair(i,a[i]);
}
b[1]=q[l].second;
R(i,k,n)
{
while(r&&a[i]>=q[r-1].second) r--;
l=min(l,r);
q[r++]=make_pair(i,a[i]);
while(i-k>q[l].first-1) l++;
// printf("l=%d r=%d\n",l,r);
b[i-k+2]=q[l].second;
}
F(i,1,n-k+1) printf("%d%c",b[i],i==n-k+1?'\n':' ');
}
return 0;
}
/*
1.用pair记录每个放入队列的数的下标和值
2.从后往前找插入的位置,顺便删除后面的元素
3.更新左端点l
4.如果左端点的下标小于区域左端点,更逊左端点
*/

POJ2823:Sliding Window的更多相关文章

  1. POJ 2823:Sliding Window 单调队列

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 48930   Accepted: 14130 ...

  2. 【poj2823】 Sliding Window

    http://poj.org/problem?id=2823 (题目链接) 题意 维护滑动窗口最大最小值. Solution sb单调队列 代码 // poj2823 #include<algo ...

  3. 【POJ2823】Sliding Window

    http://poj.org/problem?id=2823 题意:你有一个长度n的序列,分别询问[1,k],[2,k+1],[3,k+2],...,[n-k+1,n]这n-k+1个区间的最大值和最小 ...

  4. Sliding Window Matrix Maximum

    Description Given an array of n * m matrix, and a moving matrix window (size k * k), move the window ...

  5. POJ2823 Sliding Window (单调队列)

    POJ2823 Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 38342   Accepte ...

  6. codevs4373 窗口==poj2823 Sliding Window

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 53676   Accepted: 15399 ...

  7. sliding window:"Marginalization","Schur complement","First estimate jacobin"

    [1]知行合一2 SLAM中的marginalization 和 Schur complement SLAM的Bundle Adjustment上,随着时间的推移,路标特征点(landmark)和相机 ...

  8. 题解报告:poj 2823 Sliding Window(单调队列)

    Description An array of size n ≤ 106 is given to you. There is a sliding window of size k which is m ...

  9. POJ2823 Sliding Window

    Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 53086   Accepted: 15227 Case Time Limi ...

随机推荐

  1. 《effective C++》:条款37——绝不重新定义继承而来的缺省参数值

    引子: 阿里的一道题: #include <IOSTREAM> using namespace std; class A{ public: ) { cout<<"a~ ...

  2. Rem 字体设置学习一

    JS方法动态计算根元素的字体大小: [淘宝首页:m.taobao.com] (function (doc, win) { var docEl = doc.documentElement, resize ...

  3. SQL SERVER 2012 第五章 创建和修改数据表 の CREATE语句

    CREATE <object type> <object name> CREATE DATABASE <database name> 比较完整的语法列表: 日志文件 ...

  4. kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.

    https://blog.csdn.net/Mr_Hou2016/article/details/79484032

  5. Git入门使用

    Git入门使用 安装Git 软件包如: Git-2.7.2-32-bit_setup.1457942412.exe TortoiseGit-1.8.12.0-64bit.msi 安装时候,直接点下一步 ...

  6. grep使用正则表达式搜索IP地址

    递归搜索当前目录及其子目录.子目录的子目录……所包含文件是否包含IP地址 grep -r "[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit: ...

  7. Android 自己定义View须要重写ondraw()等方法

    Android  自己定义View须要重写ondraw()等方法.这篇博客给大家说说自己定义View的写法,须要我们继承View,然后重写一些 方法,方法多多,看你须要什么方法 首先写一个自己定义的V ...

  8. 到底该不该使用存储过程 MySQL查询性能优化一则

    到底该不该使用存储过程   看到<阿里巴巴java编码规范>有这样一条 关于这条规范,我说说我个人的看法 用不用存储过程要视所使用的数据库和业务场景而定的,不能因为阿里巴巴的技术牛逼,就视 ...

  9. QT学习笔记(一)——ui的认识

    ////////////2015/08/06/////////////////// ///////////by xbw////////////////////////// //////////环境 Q ...

  10. SQLServer删除数据库

    删除时提示: 网上找了一段: USE MASTER GO DECLARE @dbname SYSNAME SET @dbname = 'shujk' --这个是要删除的数据库库名 ) DECLARE ...