题目要输出一个序列各个长度k的连续子序列的最大值最小值。

多次RMQ的算法也是能过的,不过单调队列O(n)。

这题,队列存元素值以及元素下标,队尾出队维护单调性然后入队,队首出队保持新元素下标与队首元素下标差小于k。

以前写的还是3个if-else,重写了下。。不加输出挂会T。。

 #include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 1111111
inline void in(int &ret){
char c; int sgn;
while(c=getchar(),c!='-'&&(c<''||c>'')) if(c==EOF) return;
sgn=(c=='-')?-:; ret=(c=='-')?:(c-'');
while(c=getchar(),c>=''&&c<='') ret=ret*+(c-'');
ret*=sgn;
}
void out(int x){
if(x<){
putchar('-'); out(-x);
return;
}
if(x>) out(x/);
putchar(x%+'');
}
int que[MAXN],idx[MAXN],front,rear;
int a[MAXN];
int main(){
int n,k;
in(n); in(k);
for(int i=; i<=n; ++i){
in(a[i]);
}
for(int i=; i<=n; ++i){
if(front!=rear && idx[front]+k<=i) ++front;
while(front!=rear && que[rear-]>=a[i]) --rear;
idx[rear]=i; que[rear]=a[i]; ++rear;
if(i>=k){
out(que[front]); putchar(' ');
}
}
putchar('\n');
front=rear=;
for(int i=; i<=n; ++i){
if(front!=rear && idx[front]+k<=i) ++front;
while(front!=rear && que[rear-]<=a[i]) --rear;
idx[rear]=i; que[rear]=a[i]; ++rear;
if(i>=k){
out(que[front]); putchar(' ');
}
}
return ;
}

最新文章

  1. cookies如何成为全局变量以及设置,删除,获取
  2. JavaSript模块规范 - AMD规范与CMD规范介绍
  3. 关于去除Eclipse对JavaScript的验证
  4. WIZnet官方网盘
  5. android和ubifs
  6. C#Winform程序如何发布并自动升级(图解)
  7. Codebook model 视频抠像 xp sp3 + vs2005 + OpenCV 2.3.1
  8. 最有用的Linux命令行使用技巧集锦
  9. 在meteor中使用支付,以及与服务器进行数据交互
  10. Java调用Telnet示例
  11. 【HDOJ】1818 It&#39;s not a Bug, It&#39;s a Feature!
  12. 2015第14周五Tomcat版本
  13. 一个Socket连接管理池(心跳机制)
  14. JS中常见排序算法详解
  15. Android学习探索之App多渠道打包及动态添加修改资源属性
  16. git for windows上传项目到github
  17. 属性动画基础之ValueAnimator
  18. Idea-Java接入银联支付的Demo
  19. PHP 使用POST 获取不到部分数据问题
  20. react服务端渲染同构报错Browser history needs a DOM

热门文章

  1. MFC 中控件的启用与禁用
  2. [Unity3D]引擎崩溃、异常、警告、BUG与提示总结及解决方法
  3. mysql.msi安装流程
  4. 他们在军训,我在搞 OI(一)
  5. [BZOJ1529][POI2005]ska Piggy banks
  6. iOS 关于UITableView的dequeueReusableCellWithIdentifier
  7. LightOJ 1315 - Game of Hyper Knights(博弈sg函数)
  8. 【转】一个不错的eclipse反编译插件
  9. mysql中char,varchar,text区别总结
  10. ORACLE用SYS登录报ORA-28009:connection as SYS should be as SYSDBA OR SYSOPER解决方法