/*
给定n个数的数列,要求枚举长为k的区间,求出每个区间的最长上升子序列长度 首先考虑给定n个数的数列的LIS求法:从左往右枚举第i点作为最大点的贡献,
那么往左找到第一个比a[i]大的数,设这个数下标l,那么[l+1,i-1]的后继显然是i
那么[l+1,i-1]区间,和包括第i个数的LIS都可以+1,处理完所有点后求[1,n]区间的最大值即可
区间更新显然用线段树解决,线段树叶子结点维护第i个位置被加次数,即以第i个结点为起点的LIS长度 本题是枚举长为k的区间,求每个区间的LIS,那么只要在更新时查询区间[i-k+1,i]的最大值即可
要先预处理出第一个比a[i]大的a[i]左边的数的下标 : 单调栈
*/
#include<bits/stdc++.h>
#include<stack>
using namespace std;
#define maxn 1200006
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int n,k,a[maxn],l[maxn];
int Max[maxn<<],lazy[maxn<<];
inline void pushup(int rt){
Max[rt]=max(Max[rt<<],Max[rt<<|]);
}
inline void pushdown(int rt){
if(lazy[rt]){
lazy[rt<<]+=lazy[rt];
lazy[rt<<|]+=lazy[rt];
Max[rt<<]+=lazy[rt];
Max[rt<<|]+=lazy[rt];
lazy[rt]=;
}
} void update(int L,int R,int l,int r,int rt){
if(L<=l && R>=r){
lazy[rt]++;Max[rt]++;
return;
}
pushdown(rt);
int m=l+r>>;
if(L<=m)update(L,R,lson);
if(R>m)update(L,R,rson);
pushup(rt);
}
int query(int L,int R,int l,int r,int rt){
if(L<=l && R>=r)return Max[rt];
pushdown(rt);
int m=l+r>>,res=;
if(L<=m)res=max(res,query(L,R,lson));
if(R>m)res=max(res,query(L,R,rson));
return res;
} stack<int>stk;
int main(){
cin>>n>>k;
for(int i=;i<=n;i++)scanf("%d",&a[i]);
a[]=0x3f3f3f3f;
stk.push();
for(int i=;i<=n;i++){
while(a[i]>a[stk.top()])
stk.pop();
l[i]=stk.top();
stk.push(i);
}
/* for(int i=1;i<=n;i++)
cout<<l[i]<<" ";*/
for(int i=;i<=n;i++){
update(l[i]+,i,,n,);
if(i-k+>=)
cout<<query(i-k+,i,,n,)<<" ";
}
}

最新文章

  1. Angular.js中使用$watch监听模型变化
  2. linux源码分析(一)
  3. TCP/IP三次握手和HTTP过程
  4. 高性能 Windows Socket 组件 HP-Socket v2.3.1-beta-1 发布
  5. CMPP3.0 长短信实现方案
  6. 搜索引擎关键词劫持之asp篇
  7. IE6不支持CSS的属性选择器
  8. 用VNC远程图形化连接Linux桌面的配置方法
  9. Python _ 开始介绍对象
  10. android 绘图之Canvas,Paint类
  11. 2016 Mac OS 10.11 CocoaPods的安装问题
  12. android java获取当前时间的总结
  13. ios专题 - socket(1)
  14. NOR FLASH与NAND FLASH
  15. Xcode no visible @interface for xxx declares the selector errors
  16. 香港多IP站群服务器-搭建多IP代理服务器、游戏加速服务器
  17. org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably du
  18. Qt全局宏和变量
  19. 数据库常用操作SQL语句
  20. 观察者模式--java

热门文章

  1. Javascript - ExtJs - 其它
  2. 如何访问IPV6?很简单,几个命令行即可。
  3. linux syscall 详解【转】
  4. 高并发的socket的高性能设计【转】
  5. html5 file 上传文件
  6. 006_tcpdump专题
  7. 缓存系列之三:redis安装及基本数据类型命令使用
  8. Anaconda安装新模块
  9. JDK的安装及环境变量配置
  10. [PHP]PDO各方法在发生MYSQL断开时的反应