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 ...
随机推荐
- cocos2d-x3.0 ListView
.h #include "cocos2d.h" #include "cocos-ext.h" #include "ui/CocosGUI.h" ...
- 腾讯QQ企业邮箱POP3/SMTP设置
腾讯企业邮箱支持通过client进行邮件管理. POP3/SMTP协议 收发邮件server地址分别例如以下. 接收邮件server:pop.exmail.qq.com (port 110) 发送邮件 ...
- spin_lock & mutex_lock的差别?
本文由该问题引入到内核锁的讨论,归纳例如以下 为什么须要内核锁? 多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是能够訪问全部内核数据的,因此要对共享数据进行保护,即相互排斥处理 有 ...
- python-gdb
https://blog.log4d.com/2013/11/python-gdb/ https://wiki.python.org/moin/DebuggingWithGdb
- SqlLite 简明教程
SQL DML 和 DDL 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). 注:"--"双减号为行注释 ...
- ubuntu下git clone 出现Permission denied (publickey).
今天在ubuntu上使用git 克隆 github上面的库,一直权限拒绝Permission denied (publickey). 公钥绑了好几次,都不行: 最后怀疑是git配置公钥地址有问题:打开 ...
- 使用了hibernate时候乱码问题
在配置文件的url地址最后加上characterEncoding=utf-8
- HTML5 文件域+FileReader 分段读取文件并上传(七)-WebSocket
一.单文件上传实例 HTML: <div class="container"> <div class="panel panel-default" ...
- Html5 部分特性
HTML5 是 W3C 与 WHATWG 合作的结果. 编者注:W3C 指 World Wide Web Consortium,万维网联盟. 编者注:WHATWG 指 Web Hypertext Ap ...
- oracle约束条件状态
Oracle完整性约束有一下4种: • DISABLE NOVALIDATE • ENABLE NOVALIDATE • DISABLE VALIDATE • ENABLE VALIDATE • ...