题目

该题目就是求这n个数的前缀和所组成的数组的所有子区间的左端点和右端点相差不超过m,且他们的前缀和差最大,求出这个最大值即可。

而朴素算法肯定会T,而我们发现如果前缀和最大的话,则前缀和的值一定是满足单调递增的,因此可以用单调队列优化。

#include <iostream>//单调队列,队列里满足后加的数要比之前的大
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#define N 500011
using namespace std;
deque <int> qmax;
int n, m, ans;
int data[N], sum[N];
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%d", &data[i]), sum[i] = sum[i - 1] + data[i];
for (int i = 1; i <= n; i++)
{
while (qmax.size() && sum[i] < sum[qmax.back()]) //队列中要满足单调递增,而为什么要选择出队,而不选择不加入该数呢,因为队列中的值已经更新了ans所以已经没用了,但是加入的数还有可能更新答案,因此需要加入该数
qmax.pop_back();
qmax.push_back(i);
while (qmax.back() - qmax.front() > m) qmax.pop_front();
ans = max(ans, sum[qmax.back()] - sum[qmax.front()]);//sum[qmax.front()]一定是最小的
}
printf("%d", ans);
return 0;
}

最新文章

  1. Oracle 故障处理总结
  2. 使用野狗(Wilddog)云setValue写入数据
  3. 关于iphone6安装了727个应用后,更新app 导致一些app无法更新,无法删除,重启后消失,但是却还是占用空间的解决办法
  4. T-SQL 语句创建Database的SQL mirroring关系
  5. angularjs手动解析表达式($parse)
  6. NDK配置debug环境时:Error:FAILURE: Build failed with an exception
  7. C++项目中采用CLR的方式调用C#编写的dll
  8. android中:/system/bin/sh: : No such file or directory错误
  9. 静默文件安装安装WebLogic
  10. Dictionary 字典的使用
  11. (转)Python标准库02 时间与日期 (time, datetime包)
  12. java-双大括号实例初始化的反模式
  13. Quartz可以用来做什么
  14. nand ECC 算法记录
  15. ANGULAR 2 BITS: UNIFIED DEPENDENCY INJECTION
  16. IE、火狐导入收藏夹乱码解决方案
  17. Android成长之路-实现简单动画
  18. 数据採集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)
  19. ORM 模型层
  20. Linux硬盘性能检测

热门文章

  1. Java 并发框架Disruptor(七)
  2. 什么是MBR
  3. 【阿里云开发】- 安装MySQL数据库
  4. UnicodeDecodeError: &#39;utf-8&#39; codec can&#39;t decode byte..问题
  5. aiohttp你不知道的异步操作网络请求
  6. 编译安装php服务报错问题:configure: error: Cannot find libmysqlclient under /usr.
  7. Django admin 修改密码
  8. layui 单选框、复选框、下拉菜单 不显示问题 记录
  9. SQL SERVER-查询存储运行状态
  10. CSS3 颜色渐变、阴影、渐变的阴影