P1886 滑动窗口

现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。

例如:

The array is [1 3 -1 -3 5 3 6 7], and k = 3.

输入输出格式

输入格式:

输入一共有两行,第一行为n,k。

第二行为n个数(<INT_MAX).

输出格式:

输出共两行,第一行为每次窗口滑动的最小值

第二行为每次窗口滑动的最大值

输入输出样例

输入样例#1:

8 3
1 3 -1 -3 5 3 6 7
输出样例#1:

-1 -3 -3 -3 3 3
3 3 5 5 6 7

说明

50%的数据,n<=10^5

100%的数据,n<=10^6

 //#pragma GCC optimize("O1")
//#pragma GCC optimize("O2")
//#pragma GCC optimize("O3")
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
//#include<stack>
//#include<map>
#define R(a,b,c) for(register int (a)=(b);(a)<=(c);++(a))
#define nR(a,b,c) for(register int (a)=(b);(a)>=(c);--(a))
#define Ii inline int
#define Iv inline void
#define Il inline long long
#define Ib inline bool
#define INF 0x3f3f3f3f
#define re register
#define ll long long
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
template<class Tp>Iv Cmax(Tp &a,Tp b){((a)=(a)>(b)?(a):(b));}
template<class Tp>Iv Cmin(Tp &a,Tp b){((a)=(a)<(b)?(a):(b));}
#define Fill(a,b) memset((a),(b),sizeof((a)))
#define D_e_Line printf("\n-------------\n");
#define D_e(x) printf("\n______%d_______\n",x)
#define Pause system("pause")
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;
const int N=;
Ii read(){
int s=,f=;char c;
for(c=getchar();c>''||c<'';c=getchar())if(c=='-')f=-;
while(c>=''&&c<='')s=s*+(c^''),c=getchar();
return s*f;
}
template<class Tp>Iv print(Tp x){
if(x<)putchar('-'),x=-x;
if(x>)print(x/);
putchar(x%^'');
}
int t_max[N<<],t_min[N<<];
Iv pushup(int rt){
t_max[rt]=Max(t_max[rt<<],t_max[rt<<|]),
t_min[rt]=Min(t_min[rt<<],t_min[rt<<|]);
}
Iv updata(int x,int w,int l,int r,int rt){
if(l==r){t_max[rt]+=w,t_min[rt]+=w;return;}
int mid=l+r>>;
x<=mid?updata(x,w,lson):updata(x,w,rson) ;
pushup(rt);
}
Ii query_max(int L,int R,int l,int r,int rt){
if(L<=l&&r<=R)return t_max[rt];
int mid=l+r>>,maxium=-INF;
if(L<=mid)Cmax(maxium,query_max(L,R,lson));
if(R>mid)Cmax(maxium,query_max(L,R,rson));
return maxium;
}
Ii query_min(int L,int R,int l,int r,int rt){
if(L<=l&&r<=R)return t_min[rt];
int mid=l+r>>,minium=INF;
if(L<=mid)Cmin(minium,query_min(L,R,lson));
if(R>mid)Cmin(minium,query_min(L,R,rson));
return minium;
}
int main(){
int n=read(),K=read();
R(i,,n)
updata(i,read(),,n,);
int l=,r=K;
while(){
printf("%d ",query_min(l,r,,n,));
++l,++r;
if(r>n)break;
}
putchar('\n');
l=,r=K;
while(){
printf("%d ",query_max(l,r,,n,));
++l,++r;
if(r>n)break;
}
return ;
}

SegmentTree_80.cpp

 //#pragma GCC optimize("O1")
//#pragma GCC optimize("O2")
//#pragma GCC optimize("O3")
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<ctime>
#include<cmath>
//#include<vector>
//#include<queue>
//#include<stack>
//#include<map>
#define R(a,b,c) for(register int (a)=(b);(a)<=(c);++(a))
#define nR(a,b,c) for(register int (a)=(b);(a)>=(c);--(a))
#define Ii inline int
#define Iv inline void
#define Il inline long long
#define Ib inline bool
#define INF 0x3f3f3f3f
#define re register
#define ll long long
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
template<class Tp>Iv Cmax(Tp &a,Tp b){((a)=(a)>(b)?(a):(b));}
template<class Tp>Iv Cmin(Tp &a,Tp b){((a)=(a)<(b)?(a):(b));}
#define Fill(a,b) memset((a),(b),sizeof((a)))
#define D_e_Line printf("\n-------------\n");
#define D_e(x) printf("\n______%d_______\n",x)
#define Pause system("pause")
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;
const int N=;
Ii read(){
int s=,f=;char c;
for(c=getchar();c>''||c<'';c=getchar())if(c=='-')f=-;
while(c>=''&&c<='')s=s*+(c^''),c=getchar();
return s*f;
}
template<class Tp>Iv print(Tp x){
if(x<)putchar('-'),x=-x;
if(x>)print(x/);
putchar(x%^'');
}
int t_max[N<<],t_min[N<<];
int M;
Iv Build(int n){
for(M=;M<=n+;M<<=);
}
Iv updata(int n,int w){
int tmp=n;
for(t_max[n+=M]+=w,n>>=;n;n>>=)
t_max[n]=Max(t_max[n<<],t_max[n<<|]);
n=tmp;
for(t_min[n+=M]+=w,n>>=;n;n>>=)
t_min[n]=Min(t_min[n<<],t_min[n<<|]);
}
Ii query_max(int s,int t){
int ans=-INF;
for(s+=M-,t+=M+;s^t^;s>>=,t>>=){
if(~s&)Cmax(ans,t_max[s^]);
if(t&)Cmax(ans,t_max[t^]);
}
return ans;
}
Ii query_min(int s,int t){
int ans=INF;
for(s+=M-,t+=M+;s^t^;s>>=,t>>=){
if(~s&)Cmin(ans,t_min[s^]);
if(t&)Cmin(ans,t_min[t^]);
}
return ans;
}
int main(){
int n=read(),K=read();
Build(n);
R(i,,n)
updata(i,read());
int l=,r=K;
while(){
printf("%d ",query_min(l,r));
++l,++r;
if(r>n)break;
}
putchar('\n');
l=,r=K;
while(){
printf("%d ",query_max(l,r));
++l,++r;
if(r>n)break;
}
return ;
}

SegmentTree_ZKW_100.cpp

PS: POJ TLE

Luogu P1886 滑动窗口的更多相关文章

  1. [Luogu P1886]滑动窗口--单调队列入门

    题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...

  2. luogu P1886 滑动窗口(单调队列

    题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...

  3. POJ 2823 Sliding Window & Luogu P1886 滑动窗口

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 66613   Accepted: 18914 ...

  4. P1886 滑动窗口(单调队列)

    P1886 滑动窗口 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: ...

  5. P1886 滑动窗口&&P1440 求m区间内的最小值

    声明:下面这两个题就不要暴力了,学一学单调队列吧 推荐博文:https://www.cnblogs.com/tham/p/8038828.html 单调队列入门题 P1440 求m区间内的最小值 题目 ...

  6. 单调队列优化&&P1886 滑动窗口题解

    单调队列: 顾名思义,就是队列中元素是单调的(单增或者单减). 在某些问题中能够优化复杂度. 在dp问题中,有一个专题动态规划的单调队列优化,以后会更新(现在还是太菜了不会). 在你看到类似于滑动定长 ...

  7. 洛谷 P1886 滑动窗口(单调队列)

    题目链接 https://www.luogu.org/problemnew/show/P1886 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始 ...

  8. P1886 滑动窗口 /【模板】单调队列 方法记录

    原题链接 滑动窗口 /[模板]单调队列 题目描述 有一个长为 \(n\) 的序列 \(a\),以及一个大小为 \(k\) 的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最 ...

  9. 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)

    To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...

随机推荐

  1. rocketmq安装部署过程(4.0.0版本)

    准备工作 3个虚拟机节点的构成如下 : 安装步骤 操作过程 1.安装包已经上传至其中1个节点. 2.解压缩安装包 命令:unzip rocketmq-all-4.0.0-incubating-bin- ...

  2. 利用predis操作redis方法大全

    predis是PHP连接Redis的操作库,由于它完全使用php编写,大量使用命名空间以及闭包等功能,只支持php5.3以上版本,故实测性能一般,每秒25000次读写. 将session数据存放到re ...

  3. 大数据hadoop分布式系统

    1>hadoop简介: Hadoop是一个开发和运行处理大规模数据的软件平台,是Apache的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行      分布式计算 ...

  4. 19、Semantic-UI之图片的动画效果

      在Semantic-UI中定义了很多图片动画效果,可以直接使用. 示例:定义图片动画 <!DOCTYPE html> <html lang="en"> ...

  5. TSQL--约束基础和Demo

    --============================================================ SQL SERVER 中使用constraint和role来对数据进行限制 ...

  6. Delegate   Func  Action  Predicate default() 知识点

    看仓储模式,有代码写到这几个关键字,陌生,记录下来.       定义一个类型,此类型抽象化了相似结构的某一类方法,因此我们能将此类型代表的方法作为参数进行传递.      Delegate至少0个参 ...

  7. Webbench的使用

    Webbench是一个在linux下使用的非常简单的网站压测工具. 它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力 ...

  8. ML.NET---.NET下的机器学习引擎(简介)

    ML.NET 是一个跨平台的开源机器学习框架,它可以使 .NET 开发人员更容易的开展机器学习工作. ML.NET 允许 .NET 开发人员开发自己的模型,即使没有机器学习的开发经验,也可以很容易的将 ...

  9. cesium编程入门(七)3D Tiles,模型旋转

    cesium编程入门(七)3D Tiles,模型旋转 上一节介绍了3D Tiles模型的位置移动,和贴地的操作,这一节来聊一聊模型的旋转, 参考<WebGl编程指南>的第四章 假设在X轴和 ...

  10. HTML5 开发APP 第一章

    当今天下,移动端基本上是安卓和苹果的天下,基本上没微软什么事,作为微软忠实的支持者,也要顺势而变. 但安卓和IOS  开发是两个完全不同的世界,有没有一种技术,开发完以后可以运行在任意终端呢,答案是有 ...