题目描述

给出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:

  1. 5 6
  2. 1 2 1 1 5
  3. 1 2 3 4 5 6

输出样例#1:

  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向左移动的时候不断弹栈就行了。

  1. #include<cstdio>
  2. #include<string>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. #define N 1000005
  7. #define re register int
  8. #define LL long long
  9. using namespace std;
  10. inline int read(){
  11. int x=0,w=1;
  12. char ch=getchar();
  13. while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
  14. if(ch=='-') w=-1,ch=getchar();
  15. while(ch<='9'&&ch>='0') x=(x<<3)+(x<<1)+ch-48,ch=getchar();
  16. return x*w;
  17. }
  18. int n,m,ans;
  19. LL k,a[N],b[N],sum[N];
  20. int top,stack[N];
  21. int main() {
  22. freopen("in.txt","r",stdin);
  23. freopen("out.txt","w",stdout);
  24. n=read(),m=read();
  25. for (re i=1;i<=n;++i) a[i]=read();
  26. while (m--) {
  27. k=read();ans=top=0;
  28. memset(sum,0,sizeof(sum));
  29. for(re i=1;i<=n;++i) sum[i]=sum[i-1]+a[i]-k;
  30. for(re i=1;i<=n;++i) if(sum[stack[top]]>sum[i]) stack[++top]=i;
  31. for(re i=n;i>=1;--i) {
  32. while(top&&sum[i]-sum[stack[top-1]]>=0) --top;
  33. ans=max(ans,i-stack[top]);
  34. }
  35. printf("%d ",ans);
  36. }
  37. }

  

【题解】[LuoguP3503]「BZOJ2086」[POI2010] Blocks的更多相关文章

  1. 【题解】「P6832」[Cnoi2020]子弦

    [题解]「P6832」[Cnoi2020]子弦第一次写月赛题解( 首先第一眼看到这题,怎么感觉要用 \(\texttt{SAM}\) 什么高科技的?结果一仔细读题,简单模拟即可. 我们不难想出,出现最 ...

  2. 【题解】「UVA681」Convex Hull Finding

    更改了一下程序的错误. Translation 找出凸包,然后逆时针输出每个点,测试数据中没有相邻的边是共线的.多测. Solution 首先推销一下作者的笔记 由此进入>>> ( ...

  3. 【题解】「SP34013」SEUG - Seetha’s Unique Game

    这道题一看就是 贪心 . 使放的石头少,就需要石头大. 那么就可以将石头重量排序,从大到小. 这道题里面看似东西很多,但是很多东西都是没有用的.比如说:箱子的长和宽,因为题目中说「每加一个石头,水的高 ...

  4. [题解] [BZOJ4144] 「AMPPZ2014」Petrol

    题面 怎么是权限题啊 题解 有一次考过, 但是不记得了 如果每个点都是加油站的话, 这道题就是货车运输 考虑如何转化 我们可以设

  5. 【题解】「AT4303」[ABC119D] Lazy Faith

    AT4303 [ABC119D] Lazy Faith[题解][二分] AT4303 translation 有 \(a\) 个点 \(s\),有 \(b\) 个点 \(t\),问从点 \(x\) 出 ...

  6. 【题解】「AT4266」[ABC113B] Palace

    AT4266 [ABC113B] Palace 水题解*n translation 有 \(n\) 个地方,第 \(i\) 个地方的海拔为 \(H_i\),该地方的温度为 \(T-H_i \times ...

  7. 【题解】「CF363A」Soroban

    哎呀呀,咕值要掉光了,赶快水篇题解( solution 这题就是个纯模拟,首先我们根据输出样例看一下输出算盘的规则. 看数最大的 720 ,我们发现,输出的算盘张这样(之所以我不用代码框而用 \(\K ...

  8. 题解 loj2065 「SDOI2016」模式字符串

    点分治. 考虑经过当前分治中心\(u\)的点对数量. 这种数点对数的问题,有一个套路.我们可以依次考虑\(u\)的每个儿子,看用当前的儿子,能和之前已经考虑过的所有儿子,组成多少点对.这样所有合法的点 ...

  9. 【题解】「MCOI-02」Convex Hull 凸包

    题目戳我 \(\text{Solution:}\) \[\sum_{i=1}^n \sum_{j=1}^n \rho(i)\rho(j)\rho(\gcd(i,j)) \] \[=\sum_{d=1} ...

随机推荐

  1. CentOS7 搭建 Redis 集群

    一.手动搭建 1. 准备节点 节点数量至少为 6 个才能保证组成完整高可用的集群 (1) 目录结构 cluster ├── 9001 │   ├── data │   │   ├── appendon ...

  2. Keycloak 13 自定义用户身份认证流程(User Storage SPI)

    Keycloak 版本:13.0.0 介绍 Keycloak 是为现代应用程序和服务提供的一个开源的身份和访问管理的解决方案. Keycloak 在测试环境可以使用内嵌数据库,生产环境需要重新配置数据 ...

  3. [BD] Storm

    什么是实时计算 离线计算:批处理,代表MapReduce.Spark Core,采集数据Sqoop.Flume 实时计算:源源不断,代表Storm等,采集数据Flume 框架 Apache Storm ...

  4. SPECCPU2006 Spec2006 使用说明

    http://www.vimlinux.com/lipeng/author/penglee5.html Spec2006使用说明 五 10 十月 2014 By penglee 工具介绍 SPEC C ...

  5. 云计算OpenStack环境搭建(4)

    准备工作: 准备3台机器,确保yum源是可用的,分别为控制节点(192.168.11.3).计算节点(192.168.11.4)和存储节点(192.168.11.5) 控制节点:OpenStack日常 ...

  6. HDFS 的内存存储是什么?

    引言 HDFS 的定位就是一个文件系统,用于存储文件,而 HDFS 对于文件的存储方式有两种: 内存存储 异构存储 内存存储 什么是内存存储? 首先,我们来了解一下到底什么是 "内存存储&q ...

  7. C语言printf-(转自shiney)

    1.调用格式为  printf("<格式化字符串>", <参量表>);   其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另 ...

  8. 10.11 arping:发送arp请求

    arping命令 是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包检查局域网内所有设备的硬件地址.  arping 命令的参数选项及说明 -c <次数>       ...

  9. flink的checkpoint页面监控

    flink web页面中提供了针对Job Checkpoint相关的监控信息.Checkpoint监控页面共有overview.history.summary和configuration四个页签,分别 ...

  10. 重新整理 .net core 实践篇—————配置系统之军令状[七](配置文件)

    前言 介绍一下配置系统中的配置文件,很多服务的配置都写在配置文件中,也是配置系统的大头. 正文 在asp .net core 提供了下面几种配置文件格式的读取方式. Microsoft.extensi ...