题目描述

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

例如:

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

输入输出格式

输入格式:

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

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

输出格式:

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

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

说明

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

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

思路:

一般人切这道题都用的st表或者是单调队列

我手残打了个线段树(其实是因为我太菜了不会上面两个)

我线段树维护两个值,一个是区间最大值,一个是区间最小值

每次修改,在修改完叶子结点(单点插入,我当做修改处理)后,我向上pushup更新区间最值

每个节点表示的是他所负责的线段的区间最值

查询常规查询即可

代码:

// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define rii register int i
#define rij register int j
#define rs 1048576
#define inf 1<<30
using namespace std;
struct nod{
long long ma,mi;
}x[];
int n,k;
void add(long long wz,long long l,long long r,long long val,long long bh)
{
if(l==r&&l==wz)
{
x[bh].mi=val;
x[bh].ma=val;
return;
}
long long ltt=(l+r)/;
if(wz>ltt)
{
add(wz,ltt+,r,val,bh*+);
}
else
{
add(wz,l,ltt,val,bh*);
}
x[bh].mi=min(x[bh*].mi,x[bh*+].mi);
x[bh].ma=max(x[bh*].ma,x[bh*+].ma);
}
struct cs{
int maxn,minx;
}ans;
cs query(long long l,long long r,long long nl,long long nr,long long bh)
{
if(l<nl)
{
l=nl;
}
if(r>nr)
{
r=nr;
}
cs an,bn;
an.maxn=-inf;
an.minx=inf;
bn.maxn=-inf;
bn.minx=inf;
if(l==nl&&r==nr)
{
int ltt=x[bh].ma;
int kkk=x[bh].mi;
an.maxn=ltt;
an.minx=kkk;
return an;
}
int ltt=(nl+nr)/;
if(l<=ltt)
{
an=query(l,r,nl,ltt,bh*);
}
if(r>ltt)
{
bn=query(l,r,ltt+,nr,bh*+);
}
an.maxn=max(an.maxn,bn.maxn);
an.minx=min(an.minx,bn.minx);
return an;
}
long long minn[];
int main()
{
for(rii=;i<=;i++)
{
x[i].ma=-inf;
x[i].mi=inf;
}
scanf("%d%d",&n,&k);
for(rii=;i<=n;i++)
{
long long ltt;
scanf("%lld",&ltt);
add(i,,rs,ltt,);
}
for(rii=;i<=n-k+;i++)
{
ans=query(i,i+k-,,rs,);
printf("%d ",ans.minx);
minn[i]=ans.maxn;
}
printf("\n");
for(rii=;i<=n-k+;i++)
{
printf("%d ",minn[i]);
}
}

滑动窗口(poj,线段树维护区间最值)的更多相关文章

  1. [CSP-S模拟测试]:椎(线段树维护区间最值和单调栈)

    题目描述 虽不能至,心向往之. $Treap=Tree+Heap$ 椎$=$树$+$堆 小$\pi$学习了计算机科学中的数据结构$Treap$. 小$\pi$知道$Treap$指的是一种树. 小$\p ...

  2. POJ.2763 Housewife Wind ( 边权树链剖分 线段树维护区间和 )

    POJ.2763 Housewife Wind ( 边权树链剖分 线段树维护区间和 ) 题意分析 给出n个点,m个询问,和当前位置pos. 先给出n-1条边,u->v以及边权w. 然后有m个询问 ...

  3. Can you answer these queries V SPOJ - GSS5 (分类讨论+线段树维护区间最大子段和)

    recursion有一个整数序列a[n].现在recursion有m次询问,每次她想知道Max { A[i]+A[i+1]+...+A[j] ; x1 <= i <= y1 , x2 &l ...

  4. 线段树维护区间前k小

    线段树维护区间前k小 $ solution: $ 觉得超级钢琴太麻烦?在这里线段树提供一条龙服务 . 咳咳,开始讲正题!这道题我们有一个和超级钢琴复杂度一样 $ ~O(~\sum x\times lo ...

  5. CodeForces - 587E[线段树+线性基+差分] ->(线段树维护区间合并线性基)

    题意:给你一个数组,有两种操作,一种区间xor一个值,一个是查询区间xor的结果的种类数 做法一:对于一个给定的区间,我们可以通过求解线性基的方式求出结果的种类数,而现在只不过将其放在线树上维护区间线 ...

  6. 【uoj#164】[清华集训2015]V 线段树维护历史最值

    题目描述 给你一个长度为 $n$ 的序列,支持五种操作: $1\ l\ r\ x$ :将 $[l,r]$ 内的数加上 $x$ :$2\ l\ r\ x$ :将 $[l,r]$ 内的数减去 $x$ ,并 ...

  7. 【bzoj3064】Tyvj 1518 CPU监控 线段树维护历史最值

    题目描述 给你一个序列,支持4种操作:1.查询区间最大值:2.查询区间历史最大值:3.区间加:4.区间赋值. 输入 第一行一个正整数T,表示Bob需要监视CPU的总时间. 然后第二行给出T个数表示在你 ...

  8. xdoj-1324 (区间离散化-线段树求区间最值)

    思想 : 1 优化:题意是覆盖点,将区间看成 (l,r)转化为( l-1,r) 覆盖区间 2 核心:dp[i]  覆盖从1到i区间的最小花费 dp[a[i].r]=min (dp[k])+a[i]s; ...

  9. CF213E Two Permutations 线段树维护哈希值

    当初竟然看成子串了$qwq$,不过老师的$ppt$也错了$qwq$ 由于子序列一定是的排列,所以考虑插入$1$到$m$到$n-m+1$到$n$; 如何判断呢?可以用哈希$qwq$: 我们用线段树维护哈 ...

随机推荐

  1. C# ADO.NET面向对象想法

    我认为的面向对象就是把各种问题拆分开来 逐一解决,  我想的是先是数据库,到底有什么, 然后新建一个类,类里面先是private的私有的,但是可以有无数个可以连接private的pubilc的属性 可 ...

  2. js之箭头函数

    原文 ES6标准新增了一种新的函数:Arrow Function(箭头函数). 为什么叫Arrow Function?因为它的定义用的就是一个箭头: x => x * x 上面的箭头函数相当于: ...

  3. java编程中'为了性能'一些尽量做到的地方

    原文地址:http://blog.csdn.NET/m13666368773/article/details/7796924 最近的机器内存又爆满了,出了新增机器内存外,还应该好好review一下我们 ...

  4. mui 窗体切换

    手机实现窗体切换 1.在5+环境下(即H5app) 先初始化: mui.init({ subpages:[{ url:"page1.html",//子页面HTML地址,支持本地地址 ...

  5. H5手机页面剖析

    <!--强制使用webkit内核进行渲染--><meta http-equiv="X-UA-COMPATIBLE" content="IE=edge, ...

  6. myeclipse 2014 闪退问题解决

    1.删掉Workspace下面的  \.metadata\.plugins\org.eclipse.core.resources一整个文件夹 2.删掉Workspace 下面的 \.metadata\ ...

  7. Java Web 常用在线api汇总(不定时更新)

    1.Hibernate API Documentation (3.2.2.ga) http://www.hibernate.org/hib_docs/v3/api/ 2.Spring Framewor ...

  8. Oracle里删除重复记录,保留一项

    我们在使用数据库的时候,有时数据会有所重复,当我们只需要一项数据时,不需要显示重复的记录时 如下就有SQL代码: --查找表中多余的重复记录,重复记录是根据单个字段来判断 select * from ...

  9. nginx-rtmp加入权限验证的简单方法

    nginx-rtmp-module默认不限制推流权限.播放权限.如果想加入权限验证,有很多种方法. 方法一:修改源码如: 如何给 nginx rtmp 服务加入鉴权机制 http://blog.csd ...

  10. SQA计划与测试规程

    长大一条龙之SQA计划与测试规程 一.SQA计划 1.软件工程 我们之进行开发之前,在弄完需求分析的前提下,进行了软件一些列的建模和评估,我们建立了基于类的模型图类图,基于场景的模型图流程图,再对这些 ...