BZOJ_1342_[Baltic2007]Sound静音问题_单调队列

题意:

给出n个数,求∑[ max{a[i]~a[i+m-1]} - min{a[i]~a[i+m-1]} <= c ]

分析:

滑动窗口

我们维护两个单调队列,分别存最大,最小值

代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 1000050
#define LL long long
int n, a[N], Q1[N], L1, R1, Q2[N], L2, R2;
int m, c;
int main(){
scanf("%d%d%d",&n,&m,&c);
int i, j;
for(i = 1;i <= n; i++){
scanf("%d", &a[i]);
}
for(i = 1;i <= m; i++){
while(L1 < R1 && a[i] >= a[Q1[R1 - 1]]) R1--;
Q1[R1++] = i;
while(L2 < R2 && a[i] <= a[Q2[R2 - 1]]) R2--;
Q2[R2++] = i;
}
int flg = 0;
if(a[Q1[L1]] - a[Q2[L2]] <= c) puts("1"),flg=1;
for(i = 2;i <= n - m + 1; i++){
while(L1 < R1 && Q1[L1] < i) L1++;
while(L2 < R2 && Q2[L2] < i) L2++;
while(L1 < R1 && a[i + m - 1] >= a[Q1[R1 - 1]]) R1--;
Q1[R1++] = i + m - 1;
while(L2 < R2 && a[i + m - 1] <= a[Q2[R2 - 1]]) R2--;
Q2[R2++] = i + m - 1;
if(a[Q1[L1]] - a[Q2[L2]] <= c) flg = printf("%d\n",i);
}
if(! flg) puts("NONE");
}

BZOJ_1342_[Baltic2007]Sound静音问题_单调队列的更多相关文章

  1. [bzoj1342][Baltic2007]Sound静音问题_单调队列

    Sound静音问题 bzoj-1342 Baltic-2007 题目大意:给定一个n个数的序列,求所有的长度为m的区间,使得区间内最大值减去最小值不超过阈值c. 注释:$1\le n \le 10^6 ...

  2. BZOJ 1342: [Baltic2007]Sound静音问题( 单调队列 )

    一开始写了个RMQ然后就T了... 好吧正解是单调队列, 维护两个单调队列... ----------------------------------------------------------- ...

  3. 1342: [Baltic2007]Sound静音问题

    1342: [Baltic2007]Sound静音问题 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 710  Solved: 307[Submit][ ...

  4. BZOJ_2343_[Usaco2011 Open]修剪草坪 _单调队列_DP

    BZOJ_2343_[Usaco2011 Open]修剪草坪 _单调队列_DP 题意: N头牛,每头牛有一个权值,选择一些牛,要求连续的不能超过k个,求选择牛的权值和最大值 分析: 先考虑暴力DP,f ...

  5. BZOJ_1999_[Noip2007]Core树网的核_单调队列+树形DP

    BZOJ_1999_[Noip2007]Core树网的核_单调队列+树形DP Description 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T ...

  6. BZOJ 1342: [Baltic2007]Sound静音问题 | 单调队列维护的好题

    题目: 给n个数字,一段合法区间[l,l+m-1]要求max-min<=c 输出所有合法区间的左端点,如果没有输出NONE 题解: 单调队列同时维护最大值和最小值 #include<cst ...

  7. BZOJ1342 [Baltic2007]Sound静音问题

    越来越水了... 这道题是简单的单调队列,同时维护最大值和最小值即可. 另解:multiset大法求区间最大最小,但是复杂度会上升... /****************************** ...

  8. [bzoj1855][Scoi2010]股票交易_动态规划_单调队列

    股票交易 bzoj-1855 Scoi-2010 题目大意:说不明白题意系列++...题目链接 注释:略. 想法:这个题还是挺难的. 动态规划没跑了 状态:dp[i][j]表示第i天手里有j个股票的最 ...

  9. [bzoj1047][HAOI2007]理想的正方形_动态规划_单调队列

    理想的正方形 bzoj-1047 HAOI-2007 题目大意:有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 注释:$2\le a, ...

随机推荐

  1. 前端工程师的修真秘籍(css、javascript和其它)

    以我的经验,大部分技术,熟读下列四类书籍即可. 入门,用浅显的语言和方式讲述正确的道理和方法,如head first系列 全面,巨细无遗地探讨每个细节,遇到疑难问题时往往可以在这里得到理论解答,如De ...

  2. 第四章:4.2MySQL 权限系统介绍

    4.2.1 权限系统简介 MySQL 的权限系统在实现上比较简单,相关权限信息主要存储在几个被称为granttables 的系统表中,即: mysql.User,mysql.db,mysql.Host ...

  3. MFC半透明对话框

    int CTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) ...

  4. 数据库中row_number()、rank()、dense_rank() 的区别

    row_number的用途非常广泛,排序最好用它,它会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要用over子句选择对某一列进行排序才能生成序号. ...

  5. Redis的安装及学习

    最近因为做Chatbot项目需要对于NoSQL数据库进行研究,调研范围包括MongoDB和Redis.本文将介绍Redis在Windows环境的安装及如何利用python来操作Redis数据库. Re ...

  6. Lenghth of Last Word

    description: Given a string s consists of upper/lower-case alphabets and empty space characters ' ', ...

  7. SpringCloud实战-Eureka

    熟悉微服务架构或Dubbo框架的都知道,微服务中最核心.最基础的组件就是注册中心了.下面利用Spring Cloud Eureka实现服务注册中心.并注册一个简单的服务提供者. 首先先创建一个spir ...

  8. quick-cocos2d-x与 cocos2d-x的关系

    quick-cocos2d-x(后文简称 quick)与 cocos2d-x 的关系,用一句话概括:quick 是 cocos2d-x 针对 Lua 的豪华套装威力加强版. 那 quick 与 coc ...

  9. android sqlite no such table

    今天在学习android SQLite出现android sqlite no such table错误提示,提示的意思我没有创建我要插入的表,网上也没有搜索一下,也尝试了,发现还是没有解决到我的问题, ...

  10. ThreadPoolExecutor 学习笔记

    线程池的奥义 在开发程序的过程中,很多时候我们会遇到遇到批量执行任务的场景,当各个具体任务之间互相独立并不依赖其他任务的时候,我们会考虑使用并发的方式,将各个任务分散到不同的线程中进行执行来提高任务的 ...