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 ...
随机推荐
- Educational Codeforces Round 143 (Rated for Div. 2)C. Tea Tasting(前缀和+二分、贡献枚举)
C. Tea Tasting 思路 这里枚举有三种思路 然后经过考虑3是最可行的,然后接着考虑如何计算贡献 这里在实现的时候用了一个差分数组,因为我们需要记录第i个茶师它喝了多少个\(b_i\)以及不 ...
- liunx上安装django ,启动uwsgi ,语音播报python实现过程
由于需要做一个语音播报实现,用到的技术是python ,需要事先搭环境,安装uwsgi djagno环境,以下内容为百度上找到的好一点的内容,确实照着做成功了,转载一下,下次更好找资料 liunx ...
- xp 下对 pdfjs-dist 库的支持 49的chrome xp壳
公司下壳的版本非常低,不支持es6 chromium Version = 49.0.2623.87 早先是 require('pdfjs-dist'),但是这里面都是es6的代码,xp下直接就崩溃了, ...
- baidu 突然打不开了 20210621
换了个dns 123.125.81.6 114.114.114.114
- Python下使用串口发送十六进制数据
import serial from time import sleep def recv(serial): while True: data = serial.read_all() if data ...
- Linux 文件权限、VIM、防火墙
Linux 文件权限.VIM.防火墙 目录 Linux 文件权限.VIM.防火墙 SSH连接 环境变量 权限 更改文件所属 更改文件权限 su和sudo 包管理器 VI/VIM iptables防火墙 ...
- nginx root 和 alias 的区别
区别: alias 含有rewrite的意思,可以重写掉不存在的路径.( nginx rewrite请看这里) 比如正常访问的地址是: http://ip:port 当我想让 http://ip:po ...
- Linux基础操作一
开启Linux操作系统,要求以root用户登录GNOME图形界面,语言支持选择为汉语 开启虚拟机→Username:root→Password:"(注册时所创建的密码,比如"123 ...
- IGC系列:全分组卷积网络,分组卷积极致使用 | 轻量级网络
IGC系列网络的核心在分组卷积的极致运用,将常规卷积分解成多个分组卷积,能够减少大量参数,另外互补性原则和排序操作能够在最少的参数量情况下保证分组间的信息流通.但整体而言,虽然使用IGC模块后参数量和 ...
- KingbaseES V8R6集群运维案例-- 备库数据库服务意外down分析
案例说明: KingbaseES V8R6一主二备架构的集群,两个备库节点sys_log日志分别不同时间点收到'fast shutdown request'的日志信息,导致备库数据库服务down,需要 ...