题目链接

线段树区间求和问题,维护一个最大值一个最小值即可,线段树要用C++交才能过。

注意这道题不是求三个数的最大值最小值,是求k个的。

本题数据量较大,不能用N建树,用n建树。

还有一种做法是单调队列,耗时更少。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#define N 1000005
using namespace std;
int n,k;
struct Tree
{
int l,r,mx,mn;
}tree[N*];
void build(int root,int l,int r)
{
tree[root].l=l;
tree[root].r=r;
if(l==r)
{
scanf("%d",&tree[root].mx);
tree[root].mn=tree[root].mx;
return;
}
int mid=(l+r)>>;
build(root<<,l,mid);
build(root<<|,mid+,r);
tree[root].mx=max(tree[root<<].mx,tree[root<<|].mx);
tree[root].mn=min(tree[root<<].mn,tree[root<<|].mn);
}
int querymx(int root,int l,int r)
{
if(l<=tree[root].l&&r>=tree[root].r) return tree[root].mx;
int mid=(tree[root].l+tree[root].r)>>,ret=-;
if(l<=mid) ret=max(querymx(root<<,l,r),ret);
if(r>mid) ret=max(querymx(root<<|,l,r),ret);
return ret;
}
int querymn(int root,int l,int r)
{
if(l<=tree[root].l&&r>=tree[root].r) return tree[root].mn;
int mid=(tree[root].l+tree[root].r)>>,ret=;
if(l<=mid) ret=min(querymn(root<<,l,r),ret);
if(r>mid) ret=min(querymn(root<<|,l,r),ret);
return ret;
}
void pr()
{
for(int i=;i<=n-k+;i++)
printf("%d ",querymn(,i,i+k-));
puts("");
for(int i=;i<=n-k+;i++)
printf("%d ",querymx(,i,i+k-));
puts("");
}
int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
build(,,n);
pr();
}
return ;
}

POJ 2823 Sliding Window 线段树区间求和问题的更多相关文章

  1. POJ 2823 Sliding Window 线段树

    http://poj.org/problem?id=2823 出太阳啦~^ ^被子拿去晒了~晚上还要数学建模,刚才躺在床上休息一下就睡着了,哼,还好我强大,没有感冒. 话说今年校运会怎么没下雨!!!说 ...

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

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

  3. PKU 2823 Sliding Window(线段树||RMQ||单调队列)

    题目大意:原题链接(定长区间求最值) 给定长为n的数组,求出每k个数之间的最小/大值. 解法一:线段树 segtree节点存储区间的最小/大值 Query_min(int p,int l,int r, ...

  4. POJ 2823 Sliding Window 题解

    POJ 2823 Sliding  Window 题解 Description An array of size n ≤ 106 is given to you. There is a sliding ...

  5. POJ 2823 Sliding Window + 单调队列

    一.概念介绍 1. 双端队列 双端队列是一种线性表,是一种特殊的队列,遵守先进先出的原则.双端队列支持以下4种操作: (1)   从队首删除 (2)   从队尾删除 (3)   从队尾插入 (4)   ...

  6. POJ 2482 Stars in Your Window (线段树区间合并+扫描线)

    这题开始一直被矩形框束缚了,想法一直都是枚举线,但是这样枚举都需要O(n^2)...但是看了别人的思路,感觉这题思想真心很好(PS:开头好浪漫的描述啊,可惜并没有什么用)  题意就是在平面上给你一些星 ...

  7. POJ3468(线段树区间求和+区间查询)

    https://vjudge.net/contest/66989#problem/C You have N integers, A1, A2, ... , AN. You need to deal w ...

  8. Poj 3667——hotel——————【线段树区间合并】

    Hotel Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 13124   Accepted: 5664 Descriptio ...

  9. POJ 2823 Sliding Window (线段树/单调队列)

    题目不说了,可以用线段树或者单调队列,下面附上代码. 线段树: #include <iostream> #include <stdio.h> #include <algo ...

随机推荐

  1. Android Studio JNI 开发简单案例

    转载:http://www.androidchina.net/5744.html 进程保活,热修复,硬件接入等等都需要底层的支持,而底层代码是 C .C++ 写的,那么在 Android 中怎么调用底 ...

  2. Frameset框架

    总结一下.通过使用Frameset框架,可以在同一个浏览器窗口中显示不止一个页面. 先举个例子: <frameset rows="> <frame src="to ...

  3. django用户认证

    利用django自带认证功能实现用户登录认证. views.py # Create your views here. from django.shortcuts import render_to_re ...

  4. 问题记录:JavaFx 鼠标滑轮滚动事件监听!

    问题描述: 在listview的item里面添加鼠标拖拽排序功能.代码如下: setOnMouseDragged(event -> { //设定鼠标长按0.3秒后才可拖拽 防止误操作 isCan ...

  5. 精通css 高级web标准解决方案——可视化格式模型-盒模型

    1-盒模型的两种标准: IE :width 和 height属性 是包括padding和border在内的. w3c:width 和 height 属性,就是单纯的内容的宽高,padding 是内容之 ...

  6. App.config“配置系统未能初始化” 异常解决 C#

    System.Configuration.ConfigurationManager.AppSettings["user"]; 时出现“配置系统未能初始化” 错误 解决办法: 如果配 ...

  7. MyBatis源码分析(4)—— Cache构建以及应用

    @(MyBatis)[Cache] MyBatis源码分析--Cache构建以及应用 SqlSession使用缓存流程 如果开启了二级缓存,而Executor会使用CachingExecutor来装饰 ...

  8. JavaScript 中 Number()、parseInt()、parseFloat()的区别

    Number(): 概述:Number 对象由 Number() 构造器创建,是经过封装的能让你处理数字值的对象.在非构造器上下文中 (如:没有 new 操作符),Number 能被用来执行类型转换. ...

  9. 纯JS实现俄罗斯方块,打造属于你的游戏帝国

    纯JS俄罗斯方块,打造属于你的游戏帝国. 本文原始作者博客 http://www.cnblogs.com/toutou 俄罗斯方块(Tetris, 俄文:Тетрис)是一款电视游戏机和掌上游戏机游戏 ...

  10. vtkQuadratic创建半球面

    用的关键类:vtkQuadric.vtkSampleFunction.vtkContourFilter:用于创建方框的类vtkOutlineFilter #ifndef INITIAL_OPENGL ...