题目描述

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

输入格式:

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

输出格式:

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

题解:

发现,肯定要选择最多的d变成0,不然不优。并且,如果以i作为结尾,左端点为j的话,那么如果以i+1作为结尾,左端点不可能比j小。

所以,可以用一个双指针,维护L,R,

L、R为一个合法区间条件是,L~R的数的和,减去最大的长度为d的和,总和少于等于p

对于给定R,L不满足的时候,就把L右移即可。

至于L~R中长度等于d的最大的和,可以用一个单调队列维护。

复杂度O(n)

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2000000+10;
int n,d;
ll p;
int ans;
int q[N],l,r;
ll sum[N],a[N];
int main()
{scanf("%d%lld%d",&n,&p,&d);for(int i=1;i<=n;i++){scanf("%lld",&a[i]);sum[i]=sum[i-1]+a[i];}int L=1,R=1;l=1,r=0;q[++r]=d;for(R=d;R<=n;R++){//cout<<R<<endl;while(sum[R]-sum[L-1]-(sum[q[l]]-sum[q[l]-d])>p){L++;while(l<=r&&q[l]-d+1<L) l++;}if(l<=r&&sum[R]-sum[L-1]-(sum[q[l]]-sum[q[l]-d])<=p) ans=max(ans,R-L+1);//cout<<L<<endl;if(R!=n){while(l<=r&&sum[R+1]-sum[R+1-d]>sum[q[r]]-sum[q[r]-d]) r--;q[++r]=R+1;}}printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/Miracevin/p/9656091.html

[POI2015]WIL-Wilcze doły相关推荐

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

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

  2. bzoj4385 POJ2015 Wilcze doły

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

  3. 中国地质大学英语语音学习笔记(五):英语连读——相邻两元音读音(词间或词内)的连读方法和辅音加半元音(词间或词内)的连读技巧

    前言   本笔记整理于中国地质大学(武汉)的一门英语发音课程:英语语音,的第十一.十二单元的文档资料,主要是连读技巧.包括半元音,用半元音/w/和/j/衔接元音的连读,用卷舌音/r/衔接元音的连读等, ...

  4. linux 内核配置简介

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

  5. java知识精华总结

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

  6. P3594 [POI2015]WIL-Wilcze doły

    https://www.luogu.org/problemnew/show/P3594 思路:尺取+单调队列维护d长度区间最大值: #include<algorithm> #include ...

  7. BZOJ 4385 洛谷3594 POI2015 WIL-Wilcze doły

    [题解] 手残写错调了好久QAQ...... 洛谷的数据似乎比较水.. n个正整数!!这很重要 这道题是个类似two pointer的思想,外加一个单调队列维护当前区间内长度为d的子序列中元素之和的最 ...

  8. Luogu P3594 [POI2015]WIL-Wilcze doły(单调队列)

    传送门 题面: 题解: 首先我们要发现,假如右端点为 i i i ,能到达的最远的左端点为 j j j 时,那么 右端点为 i + 1 i+1 i+1 时,能到达的最远左端点一定大于等于 j j j ...

  9. [洛谷]P3594 [POI2015]WIL-Wilcze doły (#单调队列)

    题目描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. 输入格式 第一行包含三个整数n ...

  10. 洛谷 P3594 [POI2015]WIL-Wilcze doły 题解

    题目链接 以前听人讲过,现在全都忘了QwQ,特此写一个题解 首先,为了选到的区间尽可能的长,我们要把该的区间中尽可能多的数变为 0 0 0,并且满足消掉的数字和尽可能大. 我们考虑用双指针维护区间 [ ...

最新文章

  1. SAP MM模块调研问卷
  2. ActiveX技术在WEB页上的应用[转载]
  3. eclipse中设置svn的commit快捷键
  4. 计算机网络严楠,安徽工程大学
  5. c++客户端发送加锁_MySQL语句加锁分析详解
  6. 浅学习使用Ribbon 和 Feign的理解和使用
  7. bzoj1935 [Shoi2007]Tree 园丁的烦恼 二维偏序
  8. 苹果修复已遭在野利用的 iOS 和 macOS 0day
  9. powershell目录带空格_精心构造的PS1文件名导致Powershell命令执行
  10. Redis BigKey
  11. Origin2017、Origin2018详细安装教程
  12. 塑料成型计算机模拟技术,塑料成型模拟软件技术基础与应用
  13. Mybatis_select、insert、update、delete常用属性
  14. CST软件基本操作—3
  15. 「笔耕不辍」zookeeper的节点加密方式及分布式锁实现过程
  16. html手机端的图片阅读器,兼容移动端与电脑端的图片查看器viewer.js插件
  17. 使用远程工具远程连接linux(xshell,xftp,xmanager,xrdp)
  18. 罗技M545鼠标是不是垃圾鼠标中的战斗机?
  19. db2 replace函数的用法_总结篇--SUBSTITU函数实用终极帖
  20. php think-queue队列的安装使用和Supervisor的安装配置和使用

热门文章

  1. xwiki系统安装配置说明书
  2. DeepDream:图像合成教程
  3. \x 开头编码的数据解码成中文
  4. 如何打开sln文件并显示窗口_如何用VC 6.0 打开Sln的工程文件
  5. 游戏美术发展趋势,入行是选择原画还是建模?
  6. 微信小程序学习(position定位方式)
  7. mysql php b s_PHP-- B/S结构
  8. Picasa网络相册怎么了?
  9. Ruby 语言的冗余性、缺陷性和动态性正是现实世界的真实写照
  10. 高校网站云服务器,高校云服务器