Sliding Window
poj2823:http://poj.org/problem?id=2823
题意:给出一个序列,要求得到所有长度为k的连续子序列的最大和最小值。
题解:直接上线段树
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
int n,k,s;
struct Node{
int left;
int right;
int minn;
int maxn;
}node[*maxn];
void build(int l,int r,int idx){
node[idx].left=l;
node[idx].right=r;
if(l==r){
scanf("%d",&s);
node[idx].minn=s;
node[idx].maxn=s;
return;
}
int mid=(l+r)/;
build(l,mid,idx*);
build(mid+,r,idx*+);
node[idx].maxn=max(node[idx*].maxn,node[idx*+].maxn);
node[idx].minn=min(node[idx*].minn,node[idx*+].minn);
}
int queryminn(int s,int t,int idx){
if(node[idx].left==s&&node[idx].right==t){
return node[idx].minn;
}
int mid=(node[idx].left+node[idx].right)/;
if(mid>=t)return queryminn(s,t,idx*);//范围只能这么写,否则会出错
else if(mid<s)return queryminn(s,t,idx*+);
else
return min(queryminn(s,mid,idx*),queryminn(mid+,t,idx*+));
}
int querymaxnn(int s,int t,int idx){
if(node[idx].left==s&&node[idx].right==t){
return node[idx].maxn;
}
int mid=(node[idx].left+node[idx].right)/;
if(mid>=t)return querymaxnn(s,t,idx*);
else if(mid<s)return querymaxnn(s,t,idx*+);
else
return max(querymaxnn(s,mid,idx*),querymaxnn(mid+,t,idx*+));
}
int main(){
while(~scanf("%d%d",&n,&k)){
build(,n,);
for(int i=;i+k<=n+;i++){
printf("%d ",queryminn(i,k+i-,));
}
printf("\n");
for(int i=;i+k<=n+;i++){
printf("%d ",querymaxnn(i,k+i-,));
}
printf("\n");
}
}
Sliding Window的更多相关文章
- LeetCode题解-----Sliding Window Maximum
题目描述: Given an array nums, there is a sliding window of size k which is moving from the very left of ...
- [LeetCode] Sliding Window Maximum 滑动窗口最大值
Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...
- Leetcode: sliding window maximum
August 7, 2015 周日玩这个算法, 看到Javascript Array模拟Deque, 非常喜欢, 想用C#数组也模拟; 看有什么新的经历. 试了四五种方法, 花时间研究C# Sorte ...
- 239. Sliding Window Maximum *HARD* -- 滑动窗口的最大值
Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...
- POJ 2823 Sliding Window + 单调队列
一.概念介绍 1. 双端队列 双端队列是一种线性表,是一种特殊的队列,遵守先进先出的原则.双端队列支持以下4种操作: (1) 从队首删除 (2) 从队尾删除 (3) 从队尾插入 (4) ...
- POJ 2823 Sliding Window 题解
POJ 2823 Sliding Window 题解 Description An array of size n ≤ 106 is given to you. There is a sliding ...
- poj 2823 Sliding Window (单调队列入门)
/***************************************************************** 题目: Sliding Window(poj 2823) 链接: ...
- POJ 2823 Sliding Window
Sliding Window Time Limit: 12000MSMemory Limit: 65536K Case Time Limit: 5000MS Description An array ...
- POJ2823 Sliding Window
Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 53086 Accepted: 15227 Case Time Limi ...
- POJ2823 Sliding Window (单调队列)
POJ2823 Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 38342 Accepte ...
随机推荐
- MySQL Replication主从复制
MySQL Replication:NySQL复制,MySQL的复制默认为异步工作模式 mysql的复制功能是mysql内置的,装上它之后就具备了这个功能,而mysql复制是mysql实现大规模高 ...
- Apache + Tomcat集群配置详解 (1)
一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http://to ...
- 亲测 安装windows7
1.不安装更新 2.自定义高级(重新安装windows的新副版本) 3.安装到c盘 中间电脑会重启两次. 安装完之后 安装显卡驱动→这时会出现 家庭网络组选择即可.
- phpnow安装教程
点评:搭建 PHP 其实不很难,只是有点繁琐.要是自己搭建一次 PHP + MySQL 环境很是费时.更糟的是,很多新手在配置 PHP 时常常出现这样那样的问题.诸如 mysql 扩展.zend 安装 ...
- 第二篇:从 GPU 的角度理解并行计算
前言 本文从使用 GPU 编程技术的角度来了解计算中并行实现的方法思路. 并行计算中需要考虑的三个重要问题 1. 同步问题 在操作系统原理的相关课程中我们学习过进程间的死锁问题,以及由于资源共享带来的 ...
- iOS 高仿:花田小憩3.0.1
前言 断断续续的已经学习Swift一年多了, 从1.2到现在的2.2, 一直在语法之间徘徊, 学一段时间, 工作一忙, 再捡起来隔段时间又忘了.思来想去, 趁着这两个月加班不是特别多, 就决定用swi ...
- DOM - nodeType 的取值
DOM 中,共有 12 中不同类型的节点,nodeType 的取值以数值表示. 节点类型 描述 子节点 1 Element 表示元素. Element, Text, Comment, Proce ...
- asp.net mvc4 使用java异步提交form表单时出现[object object] has no method ajaxSubmit
最近接手了一个单子,说大不大,只是功能不少,开发过程中遇到该问题 先看脚本截图: 本以为是笔误,哪儿写错了,可是看来看去,都没发现有不合适的地方,对比过网上很多代码,都差不多,于是各种方式的,各种原因 ...
- tableView嵌套collectionView
首先是自定义collectionView填充的tableViewCell import UIKit // 定义一个collectionView,重写初始化大小和布局方法 class TrendsDet ...
- IBM服务器 IMM日志收集
在IBM X系列服务器背板上有一个" SYS MGMT"接口,用网线将此接口与笔记本连接起来,然后将笔记本的 IP地址配置成 192.168.70.0/24 这个网段的地址,然后 ...