Blocks bzoj-2086 Poi-2010

题目大意题目链接

注释:略。


想法:首先,不难发现,如果连续的一段数的平均值不小于输入的k的话,这段数是满足题意的。

所以,我们再次简化一下:将每个数都减去k,即求极大区间,使得区间和为正。

将所有数的前缀和自尾至头压进单调栈,然后左指针遍历1->n,右指针在单调栈上扫即可。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 1000010
using namespace std;
typedef long long ll;
ll q[N],top,n,m;
ll a[N],sum[N];
inline char nc()
{
static char *p1,*p2,buf[100000];
return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
ll read()
{
ll x=0; char c=nc();
while(!isdigit(c)) c=nc();
while(isdigit(c)) x=(x<<3)+(x<<1)+c-'0',c=nc();
return x;
}
void dispose(ll val)
{
ll ans=0;
for(int i=1;i<=n;i++)
{
sum[i]=sum[i-1]+a[i]-val;
}
top=0;
for(int i=1;i<=n;i++)
{
if(sum[q[top]]>sum[i]) q[++top]=i;
}
for(int i=n,j=top;i>=0;i--)
{
while(j&&sum[q[j-1]]<=sum[i]) j--;
ans=max(ans,i-q[j]);
}
printf("%lld ",ans);
}
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
}
ll x;
for(int i=1;i<=m;i++)
{
x=read();
dispose(x);
}
puts("");
return 0;
}

小结:%%%xqz

最新文章

  1. andriod 手机按键检测事件 onKeyDown() 简述
  2. paip.提升效率--数据绑定到table原理和流程Angular js jquery实现
  3. BZOJ1718 [Usaco2006 Jan] Redundant Paths 分离的路径
  4. Tomcat基础教程(四)
  5. 为什么z-index不起作用
  6. 如何禁止KEIL初始化RAM为零&amp; 如何判断是软复位还是上电复位
  7. 闪存主控IC的作用
  8. EasyUI - 后台管理系统 - 增加,删除,修改
  9. Andorid Clip 实现自定义的进度条效果实例
  10. Kafka学习(一)配置及简单命令使用
  11. Android Studio中绘制simpleUML类图详细说明及使用
  12. 前端入门4-CSS属性样式表
  13. 使用rpm包安装lamp环境
  14. 字节、字、bit、byte的关系【转】
  15. if标签
  16. 通过Windows API实现的MDI简易程序
  17. FlexPaper:使用flash在线展示pdf
  18. 【CSS3】好玩的动画线框
  19. 从JavaWeb的角度认识Nginx
  20. [LeetCode] 35. Search Insert Position ☆(丢失的数字)

热门文章

  1. shell脚本-循环选择语句
  2. jdk1.8 api 下载
  3. python自动化测试学习笔记-4常用模块
  4. Quartz在服务异常中断或者重启后,不执行之前漏掉的任务,重新运行下一次任务
  5. 321 Create Maximum Number 拼接最大数
  6. Java Controller下兼容xls和xlsx且可识别合并单元格的excel导入功能
  7. [ ZJOI 2006 ] Mahjong
  8. Angular——事件指令
  9. python中struct.pack()函数和struct.unpack()函数
  10. 【技术累积】【点】【java】【28】Map遍历