时限12s! 所以我用了线段树的黑暗做法,其实正解是用单调队列来做的。

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 1000001
#define lson l,mid,pos*2
#define rson mid+1,r,pos*2+1
using namespace std;
int n,k,xx,yy,ansmax,ansmin,tree[N*4],MAX[N*4],MIN[N*4],ANSMAX[N],ANSMIN[N];
void build(int l,int r,int pos){
if(l==r){scanf("%d",&tree[pos]);MAX[pos]=MIN[pos]=tree[pos];return;}
int mid=(l+r)/2;
build(lson),build(rson);
MAX[pos]=max(MAX[pos*2],MAX[pos*2+1]);
MIN[pos]=min(MIN[pos*2],MIN[pos*2+1]);
}
void query(int l,int r,int pos){
if(l>=xx&&r<=yy){ansmax=max(ansmax,MAX[pos]);ansmin=min(ansmin,MIN[pos]);return;}
int mid=(l+r)/2;
if(mid<xx)query(rson);
else if(mid>=yy)query(lson);
else query(lson),query(rson);
}
int main()
{
scanf("%d%d",&n,&k);
build(1,n,1);
for(xx=1;xx<=n-k+1;xx++){
yy=xx+k-1,ansmax=-1*0x3fffffff,ansmin=0x3fffffff;
query(1,n,1),ANSMAX[xx]=ansmax,ANSMIN[xx]=ansmin;
}
for(xx=1;xx<=n-k+1;xx++)printf("%d ",ANSMIN[xx]);puts("");
for(xx=1;xx<=n-k+1;xx++)printf("%d ",ANSMAX[xx]);
}

2016.11.16补坑 单调队列 (啊这题好水啊~)

//By SiriusRen
#include <deque>
#include <cstdio>
using namespace std;
int n,m,a[1000500];
struct Node{int pos,weight;Node(){}Node(int x,int y){pos=x,weight=y;}}ans[1000500];
deque<Node>maxx,minn;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
if(!maxx.empty()&&maxx.front().pos+m<=i)maxx.pop_front();
if(!minn.empty()&&minn.front().pos+m<=i)minn.pop_front();
while(!maxx.empty()&&maxx.back().weight<=a[i])maxx.pop_back();
while(!minn.empty()&&minn.back().weight>=a[i])minn.pop_back();
maxx.push_back(Node(i,a[i]));minn.push_back(Node(i,a[i]));
ans[i].pos=maxx.front().weight,ans[i].weight=minn.front().weight;
}
for(int i=m;i<=n;i++)printf("%d ",ans[i].weight);putchar('\n');
for(int i=m;i<=n;i++)printf("%d ",ans[i].pos);
}

POJ 2823 线段树 Or 单调队列的更多相关文章

  1. bzoj 1171 并查集优化顺序枚举 | 线段树套单调队列

    详见vfleaking在discuss里的题解. 收获: 当我们要顺序枚举一个序列,并且跳过某些元素,那么我们可以用并查集将要跳过的元素合并到一起,这样当一长串元素需要跳过时,可以O(1)跳过. 暴力 ...

  2. 1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP

    1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP 题意 用摄像机观察动物,有两个摄像机,一个可以放在奇数天,一个可以放在偶数天.摄像机在 ...

  3. POJ 2823 Sliding Window(单调队列 || 线段树)题解

    题意:求每个长度为k的数组的最大值和最小值 思路: 1.用线段树创建维护最大值和最小值,遍历询问,简单复习了一下...有点手生 2.单调队列: 可以看一下详解 单调队列顾名思义就是一个单调递增或者递减 ...

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

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

  5. POJ 2823 Sliding Window 【单调队列】

    题目链接:http://poj.org/problem?id=2823 题目大意:给出一组数,一个固定大小的窗体在这个数组上滑动,要求出每次滑动该窗体内的最大值和最小值. 这就是典型的单调队列,单调队 ...

  6. ACM学习历程—HDU 5289 Assignment(线段树 || RMQ || 单调队列)

    Problem Description Tom owns a company and he is the boss. There are n staffs which are numbered fro ...

  7. 【HDU6701】Make Rounddog Happy【权值线段树+双向单调队列】

    题意:给你一个序列,求满足要求的子序列个数,其中要求为: 1.子序列的max-子序列长度len<=k 2.子序列中不出现重复的数字 题解:首先看到子序列max,很容易想到枚举最大值然后分治,这个 ...

  8. Luogu4085 [USACO17DEC]Haybale Feast (线段树,单调队列)

    \(10^18\)是要long long的. \(nlogn\)单调队列上维护\(logn\)线段树. #include <iostream> #include <cstdio> ...

  9. POJ 2823 Sliding Window(单调队列入门题)

      Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 67218   Accepted: 190 ...

随机推荐

  1. xcode构建webdriverAgent时报错Messaging unqualified id的解决办法

    在使用xcode构建webdriverAgent时,提示build failed,报错信息为:semantic issue:Messaging unqualified id,可以参考以下解决方案 xc ...

  2. java数据类型和码表、转义字符

      类型名称 字节空间 范围 整数型 byte 1 -27到27-1   或者   -128到127   short 2 -215到215-1   int 4 -231到231-1   long 8 ...

  3. Python-暑期实训day 1

    python基础: 一 编程语言 什么是编程语言? 上面提及的能够被计算机所识别的表达方式即编程语言,语言是沟通的介质,而编程语言是程序员与计算机沟通的介质.在编程的世界里,计算机更像是人的奴隶,人类 ...

  4. [SQL Service] 时间处理:获取今天的00:00:00/获取今天的23:59:59

    获取今天的00:00:00 SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10),GETDATE(),120)) 获取今天的23:59:59 1.SELECT DAT ...

  5. 【js】数组置空的其他方式及使用场景

    数组在js中属于引用型类型. var arr = [1, 2, 3]; a = []; 通常使用以上方式.如果使用场景必须使用方法置空, 可以采用arr.length = 0; 或者使用a.splic ...

  6. How To:配置Linux iSCSI客户端

    1.安装客户端 [root@node01 Packages]# rpm -Uvh iscsi-initiator-utils-6.2.0.873-2.el6.x86_64.rpm warning: i ...

  7. C++编写谷歌日历

    #include<iostream> #include<fstream> using namespace std; void main() //程序从这里开始运行 { int ...

  8. Kail更新源、输入法、浏览器

    更新源 kali官方的更新源:图中的kali-rolling是kali目前最新的代号,kali有两个代号(codename):sana和kali-rolling: 查看自己的kali linux源版本 ...

  9. 搭建 Seafile 专属网盘

    准备域名 任务时间:15min ~ 20min 域名注册 如果您还没有域名,可以在腾讯云上选购,过程可以参考下面的视频. 视频 - 在腾讯云上购买域名 域名解析 域名购买完成后, 需要将域名解析到实验 ...

  10. 【Codeforces 225C】Barcode

    [链接] 我是链接,点我呀:) [题意] 让你把每一列都染成一样的颜色 要求连续相同颜色的列的长度都大于等于x小于等于y 问你最少的染色次数 [题解] 先求出每一列染成#或者.需要染色多少次 设f[0 ...