POJ 2823 Sliding Window 线段树
http://poj.org/problem?id=2823
出太阳啦~^ ^被子拿去晒了~晚上还要数学建模,刚才躺在床上休息一下就睡着了,哼,还好我强大,没有感冒。
话说今年校运会怎么没下雨!!!说好的福大校运会下雨呢?
-----------------------------------------分割线“嘻嘻又和大家见面了”----------------------------------------
大意:
给定一串长度为n的序列,每k个数查询一次,要求输出这k个数中的最小和最大值。
题目其实很清楚了:
The array is [1 3 -1 -3 5 3 6 7],
and k is 3.
Window position | Minimum value | Maximum value |
---|---|---|
[1 3 -1] -3 5 3 6 7 | -1 | 3 |
1 [3 -1 -3] 5 3 6 7 | -3 | 3 |
1 3 [-1 -3 5] 3 6 7 | -3 | 5 |
1 3 -1 [-3 5 3] 6 7 | -3 | 5 |
1 3 -1 -3 [5 3 6] 7 | 3 | 6 |
1 3 -1 -3 5 [3 6 7] | 3 | 7 |
一看就知道是线段树。。。然后一想st算法也可以,不过貌似会MLE,我想偷懒的呀!!!那就只好敲了线段树。。交上去RE,好吧数组太小,改了再交就AC了。
不过时间好久(9032MS)。。搜下别人的方法,还有那啥单调队列(可以说没听过嘛),还有用优先队列的,Orz。
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxnode=1000000+10;
const int MAXN=2000000+10;
const int INF=99999999;
int A[maxnode];
int ans_max[maxnode];
int ans_min[maxnode];
int qL,qR;
struct IntervalTree
{
int minv[MAXN*2];
int maxv[MAXN*2];
void build(int o, int L, int R) {
int M = L + (R-L)/2;
if(L == R)
{
minv[o] =A[L];
maxv[o]=A[L];
}
else {
build(o*2, L, M);
build(o*2+1, M+1,R);
minv[o] =min(minv[o*2], minv[o*2+1]);
maxv[o]=max(maxv[o*2], maxv[o*2+1]);
}
} int query_min(int o, int L,int R) {
int M = L + (R-L)/2,ans = INF;
if(qL <= L&& R <= qR) return minv[o]; // 当前结点完全包含在查询区间内
if(qL <= M) ans =min(ans, query_min(o*2, L, M)); // 往左走
if(M < qR) ans =min(ans, query_min(o*2+1, M+1, R)); // 往右走
return ans;
} int query_max(int o, int L,int R) {
int M = L + (R-L)/2,ans = -INF;
if(qL <= L&& R <= qR) return maxv[o]; // 当前结点完全包含在查询区间内
if(qL <= M) ans =max(ans, query_max(o*2, L, M)); // 往左走
if(M < qR) ans =max(ans, query_max(o*2+1, M+1, R)); // 往右走
return ans;
}
}t; int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&A[i]); t.build(1,1,n); int len=0;
for(int i=1;i+k-1 <=n;i++)
{
qL=i;qR=i+k-1;
ans_max[len]=t.query_max(1,1,n);
ans_min[len++]=t.query_min(1,1,n);
} for(int i=0;i<len;i++)
printf("%d ",ans_min[i]);
printf("\n");
for(int i=0;i<len;i++)
printf("%d ",ans_max[i]);
printf("\n");
}
POJ 2823 Sliding Window 线段树的更多相关文章
- POJ 2823 Sliding Window 线段树区间求和问题
题目链接 线段树区间求和问题,维护一个最大值一个最小值即可,线段树要用C++交才能过. 注意这道题不是求三个数的最大值最小值,是求k个的. 本题数据量较大,不能用N建树,用n建树. 还有一种做法是单调 ...
- PKU 2823 Sliding Window(线段树||RMQ||单调队列)
题目大意:原题链接(定长区间求最值) 给定长为n的数组,求出每k个数之间的最小/大值. 解法一:线段树 segtree节点存储区间的最小/大值 Query_min(int p,int l,int r, ...
- POJ 2823 Sliding Window 题解
POJ 2823 Sliding Window 题解 Description An array of size n ≤ 106 is given to you. There is a sliding ...
- 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)
To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...
- POJ 2823 Sliding Window + 单调队列
一.概念介绍 1. 双端队列 双端队列是一种线性表,是一种特殊的队列,遵守先进先出的原则.双端队列支持以下4种操作: (1) 从队首删除 (2) 从队尾删除 (3) 从队尾插入 (4) ...
- POJ 2823 Sliding Window (线段树/单调队列)
题目不说了,可以用线段树或者单调队列,下面附上代码. 线段树: #include <iostream> #include <stdio.h> #include <algo ...
- POJ 2823 Sliding Window(单调队列 || 线段树)题解
题意:求每个长度为k的数组的最大值和最小值 思路: 1.用线段树创建维护最大值和最小值,遍历询问,简单复习了一下...有点手生 2.单调队列: 可以看一下详解 单调队列顾名思义就是一个单调递增或者递减 ...
- POJ 2823 Sliding Window ST RMQ
Description An array of size n ≤ 106 is given to you. There is a sliding window of size k which is m ...
- poj 2823 Sliding Window (单调队列入门)
/***************************************************************** 题目: Sliding Window(poj 2823) 链接: ...
随机推荐
- 洛谷——P2678 跳石头
https://www.luogu.org/problem/show?pid=2678#sub 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着 ...
- 洛谷 P1827 美国血统 American Heritage
P1827 美国血统 American Heritage 题目描述 农夫约翰非常认真地对待他的奶牛们的血统.然而他不是一个真正优秀的记帐员.他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树 ...
- 推断一个java文件和邮箱格式是否合法
import java.util.Scanner; public class StringTest { public static void main(String[] args) { int bac ...
- Flex 正則表達式 电话、邮箱验证
一.经常使用验证 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9 ...
- Chrome不能在网易网盘中上传文件的解决办法
Chrome不能在网易网盘中上传文件的解决办法1. 安装 Adobe Flash Player PPAPI,设置flash插件 chrome://settings/content/flash,许可[* ...
- Spring中提供的集合工具类util CollectionUtils
转自:https://blog.csdn.net/fangwenzheng88/article/details/78457850 CollectionUtils类 /* * Copyright 200 ...
- golang sync.Once
package main import ( "fmt" "sync" "time" ) func main() { var once syn ...
- 栅格数据AE
转自原文 栅格数据AE 两个星期以来一直与栅格数据打交道,对AO的栅格部分应该有了一定的理解,下面是自己的一点体会,希望高手指教:-) 1.栅格数据的存储类型 栅格数据一般可以存储为ESRI GRID ...
- imageView-scaleType 图片压缩属性
今天用到了图片压缩的属性,自己参照网上的说明,验证了一下,截图如下 (1)当图片背景是方形的时候 代码如下 <LinearLayout android:id="@+id/l31&quo ...
- 39.Intellij导入子项目时,maven列表子项目灰色不可用---解决方法
转自:https://blog.csdn.net/jackieriver/article/details/79046326 导入子项目的module时,左侧project目录中有一个module图标右 ...