Description

给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0。
请找到最长的一段连续区间,使得该区间内所有数字之和不超过p。

Input

第一行包含三个整数n,p,d(1<=d<=n<=2000000,0<=p<=10^16)。
第二行包含n个正整数,依次表示序列中每个数w[i](1<=w[i]<=10^9)。

Output

包含一行一个正整数,即修改后能找到的最长的符合条件的区间的长度。

Sample Input

9 7 2
3 4 1 9 4 1 7 1 3

Sample Output

5
 
Solution
i-j<=d没有任何意义
左端点要尽量靠左,随着右端点向右移动,左端点一定也向右移动
那么取区间(j,i]答案一定等于
s[i]-s[j]-s[x]-s[x-d](x-d<=j&&x<=i)的最小值
使得答案最小的x也是随着i单调递增的,于是使用单调队列优化
代码是简单的,ac是艰难的
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<queue>
#include<map>
#include<vector>
#include<set>
#define il inline
#define re register
using namespace std;
typedef long long ll;
const int N=2000001;
int n,d,a[N],ans,head=1,tail=0,t[N];
ll s[N],p;
il ll read(){ll hs=0;char c=getchar();while(!isdigit(c)) c=getchar();while(isdigit(c)){hs=(hs<<3)+(hs<<1)+c-'0';c=getchar();}return hs;
}
int main(){n=read();p=read();ans=d=read();for(int i=1;i<=n;i++) a[i]=read();for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];for(int i=d,j=0;i<=n;i++){while(head<=tail&&s[i]-s[i-d]>s[t[tail]]-s[t[tail]-d]) tail--;t[++tail]=i;while(s[i]-s[j]-s[t[head]]+s[t[head]-d]>p){j++;if(t[head]-d<j){head++;}}ans=max(ans,i-j);}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/ExiledPoet/p/6079088.html

bzoj4385 POJ2015 Wilcze doły相关推荐

  1. 【bzoj4385】[POI2015]Wilcze doły

    单调队列扫描,记录当前区间长度为d的一段的和的最大值,和当前区间和. #include<algorithm> #include<iostream> #include<cs ...

  2. linux 内核配置简介

    Gentoo Linux Gentoo内核(gentoo-sources)特有的选项 Gentoo Linux support CONFIG_GENTOO_LINUX 选"Y"后, ...

  3. java知识精华总结

    Java 知识--精华总结 一. -java 概述与基础知识-6 1.何为编程?-6 2.Java 语言概述,历史.特点- 6 3.什么是跨平台性?原理是什么?JVM- 7 4.Jre 和 Jdk 的 ...

  4. LeetCode简单题之找到最近的有相同 X 或 Y 坐标的点

    题目 给你两个整数 x 和 y ,表示你在一个笛卡尔坐标系下的 (x, y) 处.同时,在同一个坐标系下给你一个数组 points ,其中 points[i] = [ai, bi] 表示在 (ai, ...

  5. floquet端口必须沿z轴设置_金秀友佳FMH-630加工中心伸缩Y轴钢板防护罩批发价格...

    金秀友佳FMH-630加工中心伸缩Y轴钢板防护罩批发价格 钢板防护罩装置使护罩同动且平行(避免了一般剪力式防护罩仍有蛇行的缺点),在高速时可以更平稳.没有振动产生.讯耐高温防护罩可有效地保护丝杠.光杠 ...

  6. android 动画x轴旋转,Android Roate3dAnimation实现围绕y轴竖直方向或者绕x轴方向旋转的3d动画效果...

    概要: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Roate3dAnim ...

  7. PCL:自定义创建带颜色的点云保存后rgb是一个很大的数,由x y z rgb解包为x y z r g b

    由于实验需要自己需要从3D相机中读取数据并保存为pcd格式, 下面是一部分读取并保存的代码,以及最后保存结果,但是在保存为pcd的时候发现是这个样子:  (如上代码为PCD文件中的头文件,TYPE中的 ...

  8. OpenCV(十五)边缘检测1 -- Sobel算子(一阶微分算子,X、Y方向边缘检测)

    目录 一.边缘检测基础理论 1.作用: 2.分类 1.基于搜索 2.基于零穿越 3.算子比较 二.Sobel算子基础理论 1.作用 2.原理及推导 3.更详细推导 4.Sobel函数 二.实战 1.对 ...

  9. OpenCV(八)形态学操作3--形态学梯度实现轮廓分析(基本梯度、内部梯度、外部梯度、方向梯度X(Y))

    目录 形态学梯度概述 一.基本梯度 1.原理 2.代码 3.效果 二.内部梯度 1.原理 2.代码 3.效果 三.外部梯度 1.原理 2.代码 3.效果 四.方向梯度 1.原理 2.二值化图像(黑白) ...

最新文章

  1. 手把手教你写ORM(三)
  2. 汇编语言--通用寄存器
  3. 同步异步单线程多线程初级理解
  4. mybatis报错Type interface xxx.Dao is not...
  5. 《Java8实战》笔记(02):通过行为参数传递代码
  6. 《BI那点儿事》运用标准计分和离差——分析三国超一流统帅综合实力排名 绝对客观,数据说话...
  7. php7 参数类型限定,PHP 7.4 新功能一览之参数和返回类型改进
  8. java api class_Java API:Object class
  9. linux 企业邮件服务器_什么是Linux服务器,为什么您的企业需要一个?
  10. 硬件电路基础知识(30)---RS232、RS485、RS422、RJ45接口的区别
  11. iPhone降价都救不回销量?苹果仍需努力!
  12. flash作业_在线作业产品的基本构成与逻辑分解
  13. 数据恢复工具 winhex使用教程
  14. keil4与proteus的联调
  15. 平方米用计算机怎么打,平方厘米用电脑怎么打
  16. Maya Mental Ray焦散效果
  17. 【多线程】(二)Java.lang.Process的思考
  18. java 静态导入_JAVA静态导入(import static)详解
  19. 基于改进YOLO算法的夜间车辆检测
  20. KNN+Dense SIFT+手势识别

热门文章

  1. PermutationImportance
  2. python爬虫个人小结
  3. Java如何转换protobuf-net中的bcl.Decimal对象
  4. .NET Framework 4.7 安装
  5. Oracle 执行计划
  6. 系统备份还原软件整理
  7. Wannafly挑战赛21 E 未来城市规划
  8. STM32单片机SIM800C创客GSM短信GPRS可编程模块SDK二次开发DIY
  9. MySQL性能优化之参数配置
  10. 安卓天天练练(十一)用list绑数据