滑动窗口(poj,线段树维护区间最值)
题目描述
现在有一堆数字共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",<t);
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,线段树维护区间最值)的更多相关文章
- [CSP-S模拟测试]:椎(线段树维护区间最值和单调栈)
题目描述 虽不能至,心向往之. $Treap=Tree+Heap$ 椎$=$树$+$堆 小$\pi$学习了计算机科学中的数据结构$Treap$. 小$\pi$知道$Treap$指的是一种树. 小$\p ...
- POJ.2763 Housewife Wind ( 边权树链剖分 线段树维护区间和 )
POJ.2763 Housewife Wind ( 边权树链剖分 线段树维护区间和 ) 题意分析 给出n个点,m个询问,和当前位置pos. 先给出n-1条边,u->v以及边权w. 然后有m个询问 ...
- 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 ...
- 线段树维护区间前k小
线段树维护区间前k小 $ solution: $ 觉得超级钢琴太麻烦?在这里线段树提供一条龙服务 . 咳咳,开始讲正题!这道题我们有一个和超级钢琴复杂度一样 $ ~O(~\sum x\times lo ...
- CodeForces - 587E[线段树+线性基+差分] ->(线段树维护区间合并线性基)
题意:给你一个数组,有两种操作,一种区间xor一个值,一个是查询区间xor的结果的种类数 做法一:对于一个给定的区间,我们可以通过求解线性基的方式求出结果的种类数,而现在只不过将其放在线树上维护区间线 ...
- 【uoj#164】[清华集训2015]V 线段树维护历史最值
题目描述 给你一个长度为 $n$ 的序列,支持五种操作: $1\ l\ r\ x$ :将 $[l,r]$ 内的数加上 $x$ :$2\ l\ r\ x$ :将 $[l,r]$ 内的数减去 $x$ ,并 ...
- 【bzoj3064】Tyvj 1518 CPU监控 线段树维护历史最值
题目描述 给你一个序列,支持4种操作:1.查询区间最大值:2.查询区间历史最大值:3.区间加:4.区间赋值. 输入 第一行一个正整数T,表示Bob需要监视CPU的总时间. 然后第二行给出T个数表示在你 ...
- xdoj-1324 (区间离散化-线段树求区间最值)
思想 : 1 优化:题意是覆盖点,将区间看成 (l,r)转化为( l-1,r) 覆盖区间 2 核心:dp[i] 覆盖从1到i区间的最小花费 dp[a[i].r]=min (dp[k])+a[i]s; ...
- CF213E Two Permutations 线段树维护哈希值
当初竟然看成子串了$qwq$,不过老师的$ppt$也错了$qwq$ 由于子序列一定是的排列,所以考虑插入$1$到$m$到$n-m+1$到$n$; 如何判断呢?可以用哈希$qwq$: 我们用线段树维护哈 ...
随机推荐
- hello2详解
1.GreetingServlet.java(显示问候页面表单) 此servlet重写该doGet方法,实现GETHTTP方法.servlet显示一个简单的HTML问候表单,其提交按钮就像hello1 ...
- HDU 5012 骰子旋转(DFS)
http://acm.hdu.edu.cn/showproblem.php?pid=5012 保存骰子的状态,然后用dfs或者bfs搜索 还是再讲一下dfs 我们的目标是找一个与b相同,且转次数最少的 ...
- python私有成员
在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用.在Python中,是通过_前缀来实现的. 正常的函数和变量名是公开的(publ ...
- Android Studio笔记之快捷键
Android Studio h2{ color: #4abcde; } pre{ background-color: #f8f8f8; border: solid 1px #ccc; border- ...
- Jmeter各部件的作用
JMeter主要组件介绍 1.测试计划(Test Plan)是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器. 2.线程组(Thread Group)代表一定数量的并发用户 ...
- matlab练习程序(弧形、圆柱投影的复原)
前一段介绍了从矩形图像到圆柱的正向投影,看这里和这里.今天介绍如何从已经投影的图像反映射到原图像上. 本来此种变换一定是需要数学公式的,不过这里只是用了一个很简单的方式来完成反映射. 具体就把每一列有 ...
- Enumeration 接口的使用
Enumeration是一个接口,定义了两个规则,可以获取连续的数据,对数据结构非常重要. 接口源码: publicinterfaceEnumeration<E>{ ...
- 通过 Powershell 来调整 ARM 模式下虚拟机的尺寸
需求描述 在部署完 ARM 模式的虚拟机以后,可以通过 PowerShell 命令来调整虚拟机的尺寸,以下是通过 PowerShell 命令来调整 ARM 模式的虚拟机尺寸. Note 本文只限于 A ...
- 狂欢圣诞节,Azure云邀你一起云端跑酷!
想要速度更快? 希望绕过障碍? 还想安全抵达目的地? …… 平安夜夜游时的各种畅想,不也正是 IT 同事所追求的,更是业务发展的终极目标呀. 好啦,小编说的太多了,这样不好不好.过节休息不谈工作,那就 ...
- MySQL几个join
1.因为关系型数据库的基本原理,是基于“关系代数”.最重要的一类关系代数,就是2个集合之间的运算. 从集合运算的视角,去理解SQL中的几个常用join (1)inner join (2)left jo ...