滑动窗口(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$: 我们用线段树维护哈 ...
随机推荐
- SpringMVC:系统认识一下maven
网上看了很多springMVC helloworld的教程,非常不满意:首先,maven构建的就很少,再者,绝大部分都是断章取义,让人不明就里.其中有几篇讲的好的,我摘录了一些,自己试着构建了一下项目 ...
- python发送邮件(带附件)
python通过stmp发送qq邮件,带附件 import smtplib from email.mime.multipart import MIMEMultipart from email.mime ...
- flask-session总结
一.session session和cookie的原理和区别: cookie是保存在浏览器上的键值对 session是存在服务端的键值对(服务端的session就是 ...
- canvas-菜鸟版画布时钟
这是以前自己练习写的一个画布时钟 <!DOCTYPE html><html lang="en"> <head> <meta charset ...
- 003Angular2中使用ng-bootstrap
1.检查@angular/cli版本 命令行ng -v ,版本号必须大于1.0.0-beta.24 2.新建工程 工程所在目录,命令行ng new my-app --style=scss 带style ...
- 【Linux】unix/Linux常用命令英文全称
英文全称解释更容易理解 知其然,更要知其所以然 man: Manual 意思是手册,可以用这个命令查询其他命令的用法. pwd:Print working directory 显示当前工作路径. su ...
- Resharper F12下载dll源码
原作者:赵青青 原文链接:Visual Studio(VS) F12 查看DLL源代码 Dot Peek 今天在调试时,又有这个需求,想查看dll的源代码,我决定从dot peek这个程序入手去查找相 ...
- QTableview 只显示横向线
#include <QApplication> #include <QTableWidget> #include <QPainter> #include <Q ...
- 自动装配(AutoWire)
根据 autowire 的配置选择装配策略 byName 选择和属性名 name 一致的 bean 进行装配: byType 根据类型选择,如果对应的类型匹配到多个bean,则会报错,如下配置: &l ...
- 导致SharePoint发生Timeout的几处门槛设置
IIS connection time-out setting =========================== 如何修改? Click Start, point to All Programs ...