blocks (单调栈)
题目描述

解析
对于这道题,他要求大于k的数进行操作,所以直接让每个数减k,然后用前缀和维护一下与0比较就可以了,因为一段区间和的平
均值大于k的话,那么这就是一个合法区间,即为操作后的这个区间和大于0,我们可以用一个单调递减栈去维护,先把比0小的
推入栈中,因为这个区间肯定不是答案,但这个区间外的就不一定了,因为要求最大区间,所以边界越靠后越好,所以倒叙遍历
前缀和,找最左边界,当栈顶元素的前缀和小于当前元素的前缀和,即证明从栈顶元素到当前元素之间的数相加大于0,即为一
组合法解,然后pop出去,因为区间单调递减,所以当栈顶元素前缀和大于当前元素前缀和时,即为当前解不合法,栈中其他解
也就不合法了,最后求一下下标差的最大值即可对了,记得开long long(血的教训)。。。
代码如下
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k,a[10000000],sum[10000000],ans,c,cc;
stack<int>q;
signed main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]),cc=max(cc,a[i]);
for(int z=1;z<=m;z++){
scanf("%lld",&k);
if(k>cc){
printf("0 ");
continue;
}
ans=0;
while(!q.empty())q.pop();
q.push(0);
for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i]-k;
for(int i=1;i<=n;i++){
if(sum[q.top()]>sum[i])q.push(i);
}
for(int i=n;i>=0;i--){
while(!q.empty()&&sum[q.top()]<=sum[i])c=q.top(),q.pop();
if(sum[c]<=sum[i]) ans=max(ans,abs(i-c));
}
printf("%lld ",ans);
}
return 0;
}
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 ...
随机推荐
- 学会在 C++ 中使用变量:从定义到实践
C++ 变量 变量是用于存储数据值的容器. 在 C++ 中,有不同类型的变量(使用不同的关键字定义),例如: int - 存储整数(没有小数点),例如 123 或 -123 double - 存储浮点 ...
- C 语言教程:数据类型和格式说明符
C 语言中的数据类型 C 中的变量必须是指定的数据类型,并且您必须在 printf() 函数中使用格式说明符来显示它: // 创建变量 int myNum = 5; // 整数(没有小数点) floa ...
- C# 报错 Lc.exe已退出 代码为-1 如何解决
完美解决方案:把项目文件夹下Properties文件夹下的licenses.licx文件删除,重新编译即可:
- Response下载文件
Response下载文件的主要步骤有七个: 1.要获取下载文件的路径 String realPath = "F:\\JavaWeb\\WorkSpace\\JavaWeb-Servlet\\ ...
- 信息泄露漏洞的JS整改方案
引言 ️ 日常工作中,我们经常会面临线上环境被第三方安全厂商扫描出JS信息泄露漏洞的情况,这给我们的系统安全带来了潜在威胁.但幸运的是,对于这类漏洞的整改并不复杂.本文将介绍几种可行的整改方法,以及其 ...
- C++读取配置文件ini
一.设置 ini 保存位置 // 保存到 appdata 中 LPCWSTR GetIniPath() { WCHAR buffer[MAX_PATH]; BOOL result = SHGetSpe ...
- 使用PTK卸载数据库时删除用户失败怎么办?
使用 PTK 卸载数据库时删除用户失败怎么办? 背景介绍: PTK (Provisioning Toolkit)是一款针对 MogDB 数据库开发的软件安装和运维工具,旨在帮助用户更便捷地安装部署 M ...
- 什么是coredump
什么是 coredump 介绍 在 Linux 开发中,我们经常听到程序员说我的程序 core 掉了,通常出现这类的问题是低级 bug 中的内存访问越界.使用空指针.堆栈溢出等情况.使程序运行过程中异 ...
- Next.js 实战
0x1 CSR,SSR,SSG CSR 客户端渲染(Client-Side Rendering).常见 B 端 Web 应用开发模式,前后端分离,服务器压力相对更轻,渲染工作在客户端进行,服务器直接返 ...
- Crazy Excel:Excel中的泥石流
Crazy Excel又名:疯狂Excel.是一款PC端的Excel软件工具,该软件支持windows, mac os等主流操作系统. 正如其名,作者在设计之初就加入了一些疯狂的设计,目的是创作出更加 ...