EZOJ #88
分析
自然想到二分
我们二分一个长度,之后考虑如何线性判断是否合法
我们可以维护一个单调队列表示从i开始的长度为d的区间和的最大值
每次用一段区间和减去它包含的长度为d的区间最大值即可
但是我们发现这个数据范围有那么一点点会t的征兆
于是我们考虑消除掉二分的log
于是我们继续用单调队列维护,用双指针扫一下就可以了
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
inline int ra(){
int x=,f=;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-;s=getchar();}
while(isdigit(s))x=(x<<)+(x<<)+(s-''),s=getchar();
return x*f;
}
inline long long ra2(){
long long x=,f=;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-;s=getchar();}
while(isdigit(s))x=(x<<)+(x<<)+(s-''),s=getchar();
return x*f;
}
long long pre[],del[],a[],q[],m;
int id[],fi,tl;
int n,d;
int main(){
int i,j=,k;
n=ra(),m=ra2(),d=ra();
for(i=;i<=n;i++)a[i]=ra2();
for(i=;i<=n;i++)pre[i]=pre[i-]+a[i];
for(i=;i<=n-d+;i++)del[i]=pre[i+d-]-pre[i-];
int Ans=;
fi=,tl=;
q[tl]=del[];
for(i=d;i<=n;i++){
while(tl>=fi&&q[tl]<=del[i-d+])tl--;
q[++tl]=del[i-d+];
id[tl]=i-d+;
for(j;j<=i;j++){
while(id[fi]<j)fi++;
long long x=q[fi];
if(pre[i]-pre[j-]-x<=m){
Ans=max(Ans,i-j+);
break;
}
}
}
printf("%d\n",Ans);
return ;
}
EZOJ #88的更多相关文章
- 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)
建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...
- long l=88;这个表达式是正确的,因为long比int类型大,会发生自动转换
long l=88;这个表达式是正确的,因为long比int类型大,会发生自动转换
- 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient
[源码下载] 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient 作者:webabcd 介绍重新想象 Windows 8.1 Store ...
- 程序清单 8-8 exec函数实例,a.out是程序8-9产生的可执行程序
/* ============================================================================ Name : test.c Author ...
- #有如下值集合[11,22,33,44,55,66,77,88,99,90...],将所有大于66值保存至字典的一个key中,将小于66的值保存至大二个key的值
#!/usr/bin/env python #有如下值集合[11,22,33,44,55,66,77,88,99,90...],将所有大于66值保存至字典的一个key中,将小于66的值保存至大二个ke ...
- leetcode 88
88. Merge Sorted Array Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as on ...
- BestCoder Round #88
传送门:BestCoder Round #88 分析: A题统计字符串中连续字串全为q的个数,预处理以下或加个cnt就好了: 代码: #include <cstdio> #include ...
- iisapp 命令 弹出 iisschlp.wsc [88,25] 属性值无效 progid
iisapp 命令 弹出 iisschlp.wsc [88,25] 属性值无效 progid 在执行iisapp.vbs时,可能会提示如下错误:Windows Script Component - f ...
- Part 86 to 88 Talking about Multithreading in C#
Part 86 Multithreading in C# What is a Process: Process is what the operating system uses to facil ...
随机推荐
- UVALive 3708 Graveyard(思维题)
将原有的每个雕塑的坐标位置,映射在一个总长为n+m的数轴上,设第一个点的坐标为0,(新的等分点必然有至少有一个和原来n等分的等分点重合,因为等分点可以等距的绕圆周旋转,总可以转到有至少一个重合的,不妨 ...
- nginx location配置与rewrite配置
注:原文出处 www.linuxidc.com/Linux/2015-06/119398.htm 1. location正则写法 一个示例: location =/{ # 精确匹配 / ,主机名后面不 ...
- php实现pdf导出和打印功能。
所用插件:TCODF //导出pdf public function export_pdf($order_sn){ require_once(FCPATH .'../sha ...
- ES6-浏览器运行环境配置方法
现在ES6用的越来越多,想要学习使用ES6,只需简单搭建引入几个js即可运行ES6代码 但是需要基本的服务器环境下运行(如http://10.12.8.161:8047/js-test/export/ ...
- 在Windows 7上安装ACE 6.1.0
主机环境 操作系统:Windows 7 专业版准备ACE 用浏览器打开http://download.dre.vanderbilt.edu/,下载ACE-6.1.0和ACE-html-6. ...
- UVA - 1602 Lattice Animals (暴力+同构判定)
题目链接 题意:求能放进w*h的网格中的不同的n连通块个数(通过平移/旋转/翻转后相同的算同一种),1<=n<=10,1<=w,h<=n. 刘汝佳的题真是一道比一道让人自闭.. ...
- 455. Assign Cookies Add to List
Assume you are an awesome parent and want to give your children some cookies. But, you should give e ...
- PostgreSQL学习手册 性能提升技巧
http://www.cnblogs.com/mchina/archive/2012/08/11/2537393.html 一.使用EXPLAIN: PostgreSQL为每个查询都生成一个查询 ...
- ACM学习历程—HDU5666 Segment(数论)
http://acm.hdu.edu.cn/showproblem.php?pid=5666 这题的关键是q为质数,不妨设线段上点(x0, y0),则x0+y0=q. 那么直线方程则为y = y0/x ...
- springboot springcloud eureka
参考: https://www.cnblogs.com/skyblog/p/5133752.htmlhttp://blog.csdn.net/u012734441/article/details/78 ...