Blocks(单调栈)

题干中说每次选择一个大于k的数,还要选他左右两个数其中之一加上一,最后问你最长的每个数不小于K的子序列。
这些都是障眼法,其实就是问你最长的平均值大于或等于K的最长子序列,这样就明朗了。
接下来就是找子序列的问题,因为要求的是区间最大平均值,所以不能再以单个数的值为依据来决定进出栈情况。
那只好用前缀和了,只不过要给每个数都减去K,这样还要把部分小于0的数入栈,遍历时倒序遍历,就可以求出各段的平均值了。
一旦找到满足条件的,就可以把answer更新一下,最后输出即可(记得置零)
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
#define int long long
int s[N],k,i,n,m,a[N],ma,j,ans,ansl;
stack<int>q;
void clean(){
memset(s,0,sizeof(s));
while(!q.empty())q.pop();
q.push(0);
ans=0;
}
signed main(){
scanf("%lld%lld",&n,&m);
for(i=1;i<=n;i++)scanf("%lld",&a[i]),ma=max(ma,a[i]);
for(i=1;i<=m;i++){
scanf("%lld",&k);
clean();
if(k>ma){
printf("0 ");
continue;
}
for(j=1;j<=n;j++)s[j]=s[j-1]+a[j]-k;
for(j=1;j<=n;j++)
if(s[q.top()]>s[j])q.push(j);
for(j=n;j>=0;j--){
while(!q.empty()&&s[q.top()]<=s[j]){
ansl=q.top();
q.pop();
}
if(s[ansl]<=s[j])ans=max(ans,abs(j-ansl));
}
printf("%d ",ans);
}
return 0;
}
记得开long long!!!)

Blocks(单调栈)的更多相关文章
- bzoj 2086 [Poi2010]Blocks 单调栈
[Poi2010]Blocks Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 788 Solved: 356[Submit][Status][Dis ...
- bzoj2086: [Poi2010]Blocks DP,单调栈
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2086 思路 这就有点妙了 题目意思就是让你求平均数>=k的最长序列 先求出a[i] ...
- poj 3415 Common Substrings(后缀数组+单调栈)
http://poj.org/problem?id=3415 Common Substrings Time Limit: 5000MS Memory Limit: 65536K Total Sub ...
- POJ3415 Common Substrings —— 后缀数组 + 单调栈 公共子串个数
题目链接:https://vjudge.net/problem/POJ-3415 Common Substrings Time Limit: 5000MS Memory Limit: 65536K ...
- [bzoj2086][Poi2010]Blocks_单调栈_双指针
Blocks bzoj-2086 Poi-2010 题目大意:题目链接. 注释:略. 想法:首先,不难发现,如果连续的一段数的平均值不小于输入的k的话,这段数是满足题意的. 所以,我们再次简化一下:将 ...
- POJ - 3415 Common Substrings(后缀数组求长度不小于 k 的公共子串的个数+单调栈优化)
Description A substring of a string T is defined as: T( i, k)= TiTi+1... Ti+k-1, 1≤ i≤ i+k-1≤| T|. G ...
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]
4453: cys就是要拿英魂! Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 90 Solved: 46[Submit][Status][Discu ...
- BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]
3238: [Ahoi2013]差异 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2326 Solved: 1054[Submit][Status ...
- poj 2559 Largest Rectangle in a Histogram - 单调栈
Largest Rectangle in a Histogram Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19782 ...
随机推荐
- Mysql跟Redis区别?
1. MySQL是关系型数据库:而Redis是非关系型数据库. 2.MySQL用于持久化存储数据到硬盘,功能强大,但是速度缓慢:而Redis用于存储使用较为频繁的数据到缓存中,读取速度快. 3.MyS ...
- Java 抽象类 练习
1 package com.bytezreo.template; 2 3 import java.util.Calendar; 4 import java.util.Scanner; 5 6 /** ...
- netcat 命令介绍及使用示例
netcat 命令介绍及使用示例 nc(netcat)是一个强大的网络工具,它可以用于读取和写入数据流,支持 TCP 和 UDP 协议.它常被用于网络调试和网络服务的创建. 一.安装方法 centos ...
- Nginx-web系列
nginx 系列 目录 nginx 系列 一 简述 1.1 为什么要使用? 1.2 主要用于哪里? 二. Nginx 搭建环境 2.1 版本选择 2.2 环境准备 2.2 yum 直装 2.3 ngi ...
- Java面向对象(下)--static/final/代码块/抽象/接口/内部类
目录 1 关键字:static 2 理解main方法的语法 3 类的成员之四:代码块 4关键字:final 5 抽象类与抽象方法 6 接口(interface) 7 类的成员之五:内部类 static ...
- Android Studio 下载jcenter依赖失败问题及解决
优先国内的镜像下载即可 我用的华为和阿里云的国内镜像 google() maven { url 'https://jitpack.io' } maven { url 'http://maven.ali ...
- day26--Java集合09
Java集合09 18.TreeSet 元素无序:插入顺序和输出顺序不一致 可以按照一定的规则进行排序,具体排序方式取决于构造方法: TreeSet () :根据其元素的自然排序进行排序 TreeSe ...
- java中float内存存储原理
规格化表示: 浮点数采用的是IEEE Standard 754 Floating Point Numbers标准 float占用4个字节,和int一样,也是32bit. 第1个bit表示符号,0表示正 ...
- verilog勘误系列之-->设计行为仿真和时序仿真不一致分析
描述 最近在vivado中设计一个计算器: 28bit有符号加减法,结果出现行为仿真和时序仿真不一致情况 原因 本篇是由于组合逻辑部分敏感信号使用错误导致 代码 r_a, r_b : 对计算数据a, ...
- 3DCAT实时云渲染助力上海市乡村振兴可视化平台,展现数字乡村的魅力
乡村振兴是党的十九大提出的重大战略,是实现中华民族伟大复兴的重要基础.上海作为超大城市,如何推进乡村振兴,让乡村成为城市发展的重要支撑和生态屏障,是一项重大课题. 为了全面展示上海市乡村振兴的成果和规 ...