[LuoguP3503]「BZOJ2086」[POI2010] Blocks
题目描述
给出N个正整数a[1..N],再给出一个正整数k,现在可以进行如下操作:每次选择一个大于k的正整数a[i],将a[i]减去1,选择a[i-1]或a[i+1]中的一个加上1。经过一定次数的操作后,问最大能够选出多长的一个连续子序列,使得这个子序列的每个数都不小于k。
总共给出M次询问,每次询问给出的k不同,你需要分别回答。
输入输出格式
输入格式:
第一行两个正整数N (N <= 1,000,000)和M (M <= 50)。
第二行N个正整数,第i个正整数表示a[i] (a[i] <= 10^9)。
第三行M个正整数,第i个正整数表示第i次询问的k (k <= 10^9)。
输出格式:
共一行,输出M个正整数,第i个数表示第i次询问的答案。
输入输出样例
输入样例#1:
5 6
1 2 1 1 5
1 2 3 4 5 6
输出样例#1:
5 5 2 1 1 0
题解
题目中只是问最长的一段子序列的长度,并且没有限制操作多少次,所以我们能发现一个性质,当且仅当这个序列的平均数大于等于k时,这个序列为合法序列。所以我们可以将每一个数都减去k,再找出最长的子序列和大于零
即找一个满足的$sum[i]-sum[j]$的数对i,j
可以发现如果$i<j$且$sum[i]-sum[j]$的话,选i做左端点比选j做左端点是更优的。
那么这样的话,我们只需要把s中自左向右单减的一段拿出来就行了。
还可以发现,如果r自右向左的话,l是随着r单调的,那么只需要维护一个单调递减的栈,然后r向左移动的时候不断弹栈就行了。
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1000005
#define re register int
#define LL long long
using namespace std;
inline int read(){int x=0,w=1;char ch=getchar();while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();if(ch=='-') w=-1,ch=getchar();while(ch<='9'&&ch>='0') x=(x<<3)+(x<<1)+ch-48,ch=getchar();return x*w;
}
int n,m,ans;
LL k,a[N],b[N],sum[N];
int top,stack[N];
int main() {freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);n=read(),m=read();for (re i=1;i<=n;++i) a[i]=read();while (m--) {k=read();ans=top=0;memset(sum,0,sizeof(sum));for(re i=1;i<=n;++i) sum[i]=sum[i-1]+a[i]-k;for(re i=1;i<=n;++i) if(sum[stack[top]]>sum[i]) stack[++top]=i;for(re i=n;i>=1;--i) {while(top&&sum[i]-sum[stack[top-1]]>=0) --top;ans=max(ans,i-stack[top]);}printf("%d ",ans);}
}
[LuoguP3503]「BZOJ2086」[POI2010] Blocks相关推荐
- 谷歌大脑发布神经网络的「核磁共振」,并公开相关代码
作者:杨晓凡.camel.思颖.杨文 神经网络的可解释性一直是所有研究人员心头的一团乌云.传统的尝试进行可解释性研究的方法是通过查看网络中哪个神经元被激发来来理解,但是即使我们知道「第 538 号神经 ...
- 「ArXiv2020」【Efficient Transformers: A Survey】论文笔记(更新中)
「ArXiv2020」[Efficient Transformers: A Survey]论文笔记 Abstract 1. Introduction 2. Background on Transfor ...
- 如何直观地理解「协方差矩阵」?
如何直观地理解「协方差矩阵」? Xinyu Chen Urban Traffic Data Analytics 372 人赞同了该文章 协方差矩阵在统计学和机器学习中随处可见,一般而言,可视作方差和协 ...
- 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!
构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...
- 不带头节点的链表有哪些缺点_23张图!万字详解「链表」,从小白到大佬!
链表和数组是数据类型中两个重要又常用的基础数据类型. 数组是连续存储在内存中的数据结构,因此它的优势是可以通过下标迅速的找到元素的位置,而它的缺点则是在插入和删除元素时会导致大量元素的被迫移动,为了解 ...
- 一位老码农的分享:一线程序员该如何面对「中年危机」?
如果这是第二次看到我的文章,欢迎文末扫码订阅我个人的公众号(跨界架构师)哟~ 本文长度为2728字,建议阅读8分钟. 坚持原创,每一篇都是用心之作- 先来聊一下这个问题的背景吧. 前两天有小伙伴问 ...
- 机器人 Ameca「苏醒」瞬间逼真到令人恐惧,网友纷纷惊叹……
整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 近日,国内外网友都被一段机器人「苏醒」的视频惊讶到. 视频开始时,机器人似乎已经睡着,眼睛闭着,头部略微向下倾斜.随着肩膀的伸展 ...
- AI 复活「她」! GPT-3 帮美国小哥复刻逝去未婚妻,但又夺走她……
整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 今年 7 月,一名33岁的美国小哥 Joshua Barbeau 在未婚妻去世后,根据她在 Facebook 和 twitter ...
- OpenAI 以 10 亿美元出售「灵魂」,网友热评不再「Open」
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) OpenAI 如何以 10 亿美元的价格出售其灵魂:GPT-3 和 Codex 背后的公司并不像它声称的那样开放. 当金钱成为障 ...
- 「软件」2.0时代已经到来,你需要这样的开发工具
互联网催生了软件的繁荣,而在AI浪潮的推动下,软件正在朝着更「智能」的方向发展,也就是「软件2.0」时代.「软件2.0」其实就是神经网络,也就是这一波AI浪潮的基石. 在「软件1.0」时代,程序员用J ...
最新文章
- weka分类器怎么设置样本类别_【程序喵笔记】小样本学习1.0
- 【AD】mm,mile,inch+电流大小同线宽关系
- 修改devcpp5.11的语言选项
- openswan中DH算法说明
- 操作系统与硬件、其他系统软件以及用户之间的关系
- Selenium使用中的SSL错误
- g711u g711a 格式相互转换
- Win10家庭版 傻瓜安装datahub的备忘一则
- HP Chromebox G1刷Coreboot Bios
- c语言令牌大全,C ++令牌(Tokens)
- 360浏览器等被金山毒霸网强制霸占问题解决
- 人脸检测算法代码python_Python有多强大!20行代码实现人脸检测与识别
- 为什么机房计算机外放没有声音,学校机房win7单机游戏打不开?
- Eclipse+PHPEclipse+ Subversion+ TortoiseSVN
- springboot+jsp大学生兼职系统java ssm
- String、StringBuilder类超详细笔记
- 贝叶斯定理和先后验概率
- 解决Lombok版本过低导致的编译出错问题(You aren‘t using a compiler supported by lombok)
- 各大网站的WEB服务器分析
- 在Safari中替换微软雅黑从而不显示宋体
热门文章
- 如何在手机上查银行卡号?进来手把手教你!
- 模拟调节器和数字计算机如何实现PID控制,模拟PID-调节器设计及数字化实现.doc...
- 生活是艰难的,我又划着我的断桨出发了
- 有道云笔记分享_有道云笔记
- 【斯坦福大学公开课CS224W——图机器学习】二、图机器学习中的传统方法(2)
- 高效能人士的七个习惯之一由内而外的全面造就自己读后感
- 计算机教室消防说明,6.7 消防专用电话的设置
- 程序人生 - Nature封面:脑机接口突破,可将脑中“笔迹”转为屏幕字句,速度创纪录,准确率超高
- 轻量级Kubernetes之k3s:15:firewalld对应方法
- Torrent 文件图文解析