这个裸题,滑动窗口求最大最小值,单调队列来两边,一次单调递增q[s]就是最小值,一次单调递减q[s]就是最大值

cin会超时,解除同步也没用。。。

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f; int a[N],q[N];
int minn[N],maxx[N];
int main()
{
/* ios::sync_with_stdio(false);
cin.tie(0);*/
int n,k;
while(~scanf("%d%d",&n,&k)){
for(int i=;i<n;i++)scanf("%d",&a[i]);
int s=,t=;
for(int i=;i<n;i++)
{
while(s<t&&a[i]>a[q[t-]])t--;
q[t++]=i;
if(s<t&&q[t-]-q[s]>=k)s++;
/* for(int j=s;j<t;j++)cout<<a[q[j]]<<" ";
cout<<endl;*/
minn[i]=a[q[s]];
}
s=,t=;
for(int i=;i<n;i++)
{
while(s<t&&a[i]<a[q[t-]])t--;
q[t++]=i;
if(s<t&&q[t-]-q[s]>=k)s++;
/* for(int j=s;j<t;j++)cout<<a[q[j]]<<" ";
cout<<endl;*/
maxx[i]=a[q[s]];
}
for(int i=k-;i<n;i++)
printf("%d%c",maxx[i],i==n-?'\n':' ');
for(int i=k-;i<n;i++)
printf("%d%c",minn[i],i==n-?'\n':' ');
}
return ;
}

最新文章

  1. HTMl链接- target/ name
  2. Understanding Weak References
  3. android中ListView_SimpleAdapter
  4. 理解Php中的Static
  5. beini破解无线
  6. (转)iOS项目的目录结构和开发流程
  7. UE4 Fade out Mesh
  8. JAVA提高十:ArrayList 深入分析
  9. android自定义状态栏颜色
  10. 跟我学ASP.NET MVC之二:第一个ASP.NET MVC程序
  11. C#机器学习之判断日报是否合格
  12. Java类文件的结构
  13. js的作用域题
  14. python2和3的区别
  15. disconf原理 “入坑”指南
  16. 3D打印开源软件Cura分析(1) 【转】
  17. ruby-from-other-languages
  18. (未完成&#128067;)You Don&#39;t Know JS: Scope &amp; Closures (第5章: Scope &amp; Closures)
  19. IDEA搭建Spring框架环境
  20. Django商城项目笔记No.18商品部分-数据表创建

热门文章

  1. Linux环境下Netstat与PS的使用
  2. WebStorm keyboard shortcuts
  3. docker——端口映射与容器互联
  4. Linux系统——源码编译安装
  5. ionic 打包
  6. 32. Longest Valid Parentheses(最长括号匹配,hard)
  7. list元素排序需要满足两个条件
  8. yum安装memchache
  9. Ant Design 常用命令汇总
  10. DNSmasq安装配置