【[POI2015]WIL-Wilcze doły】
第一篇题解确实会被讨论区里的数据hack掉,那么就随便水一个不会被hack掉的题解吧
首先我们尝试着发现这道题的一些结论,你就会发现答案是单调的不降的
这里的答案不降指的是选择每一个位置\(i\)作为结尾能形成的最长区间的左端点是单调不降的,这个很好证明,将\(i-1\)这个位置作为结尾形成的最长区间的左端点不可能比\(i\)作为结尾形成的最长区间的左端点更靠右
如果更靠右的话,那么\(i-1\)形成的区间还能更靠左一些,这与我们的假设不符,所以这个结论是成立的
之后我们就可以利用这个结论计算每一个\(i\)为结尾的区间的左端点在哪里了
由于\(i\)的左端点不可能比\(i-1\)的更靠左,所以我们就直接来将\(i-1\)的左端点\(last\)为起始端点就好了
如果\(p[i]-p[last-1]\)即这段区间的和减去这个区间内所有长度为\(d\)的区间和的最大值还是超过\(p\),那么我们就让\(last++\),直到满足条件为止
至于怎么维护一个区间内所有长度为\(d\)的区间和的最大值,我们用一个单调队列就好了
时间复杂度其实是均摊了两次,但是还是非常优秀的\(O(n)\)
代码
#include<iostream>
#include<cstring>
#include<queue>
#include<cstdio>
#define re register
#define maxn 2000005
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define LL unsigned long long
LL n,p,d;
LL a[maxn],pre[maxn];
LL ans,t[maxn],last;
inline LL read()
{
LL x=0;
char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
x=x*10+c-48,c=getchar();
return x;
}
int main()
{
n=read();
p=read();
d=read();
for(re int i=1;i<=n;i++)
a[i]=read();
for(re int i=1;i<=n;i++)
pre[i]=pre[i-1]+a[i];
std::deque<int> q;
for(re int i=d;i<=n;i++)
t[i]=pre[i]-pre[i-d];//t[i]表示[i-d+1,i]这个区间的和
ans=d;//最开始ans为d
q.push_back(d);
last=1;
for(re int i=d+1;i<=n;i++)
{
while(!q.empty()&&t[i]>t[q.back()]) q.pop_back();
q.push_back(i);//在队尾加入一个元素
while(!q.empty()&&q.front()-d+1<last) q.pop_front();
//,如果队首元素的左端点比last还小,那么就弹出不合法的队首元素
while(!q.empty()&&pre[i]-pre[last-1]-t[q.front()]>p)
{
last++;
while(!q.empty()&&q.front()-d+1<last) q.pop_front();
//last++后也要维护队首的合法性
}
ans=max(ans,i-last+1);
}
std::cout<<ans;
return 0;
}
【[POI2015]WIL-Wilcze doły】的更多相关文章
- 【BZOJ4385】[POI2015]Wilcze doły 单调栈+双指针法
[BZOJ4385][POI2015]Wilcze doły Description 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段 ...
- P3588 【[POI2015]PUS】(线段树优化建边)
P3588 [[POI2015]PUS] 终于有个能让我一遍过的题了,写篇题解纪念一下 给定长度为n的序列和其中部分已知的数,还有m个大小关系:区间\([l,r]\)中,有k个给定的数比剩下的\(r- ...
- BZOJ 4385: [POI2015]Wilcze doły
4385: [POI2015]Wilcze doły Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 648 Solved: 263[Submit][ ...
- [POI2015]Wilcze doły
[POI2015]Wilcze doły 题目大意: 给定一个长度为\(n(n\le2\times10^6)\)的数列\(A(1\le A_i\le10^9)\),可以从中选取不超过\(d\)个连续数 ...
- 【十大经典数据挖掘算法】EM
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 极大似然 极大似然(Maxim ...
- 【十大经典数据挖掘算法】AdaBoost
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 集成学习 集成学习(ensem ...
- 【十大经典数据挖掘算法】Naïve Bayes
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 朴素贝叶斯(Naïve Bayes) ...
- 【十大经典数据挖掘算法】Apriori
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 关联分析 关联分析是一类非常有 ...
- 【十大经典数据挖掘算法】kNN
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 引言 顶级数据挖掘会议ICDM ...
- 【linux草鞋应用编程系列】_6_ 重定向和VT100编程
一.文件重定向 我们知道在linux shell 编程的时候,可以使用文件重定向功能,如下所示: [root@localhost pipe]# echo "hello world&q ...
随机推荐
- webapi 权限控制解决方案
随着移动互联网的发展,webapi的应用越来越广泛,本文是笔者总结的webapi的认证校验案例,欢迎指出 案例分为两个功能: 1.用户登录,传入账号和密码到api服务器,然后服务器使用FormsAut ...
- RUP 4+1视图
RUP开篇之作:http://www.ibm.com/developerworks/cn/rational/r-4p1-view/index.html 百科:http://baike.baidu.co ...
- C++命名空间使用代码
namesp.h #pragma once #include <string> namespace pers { using namespace std; struct Person { ...
- git提交空文件夹和删除远程文件
git提交空文件夹 在文件夹中创建 .gitkeep 文件,文件内容如下 # Ignore everything in this directory * # Except this file !.gi ...
- golang学习之奇葩的time format
golang格式化时间时,比如如下格式进行格式化输出: fmt.Println(time.Now().Format("2007年03月")) 程序直接输出: 16007年02月 很 ...
- SZU1
CodeForces 518A 字符串进位.. #include <iostream> #include <string> #include <cstring> # ...
- C# WCF服务入门
之前在公司用的服务端是wcf写的,但是没有深入研究,最近找工作,面试的时候好多人看到这个总提问,这里做个复习 就用微软官方上的例子,搭一个简单的wcf服务,分6步 1 定义服务协定也就是契约,其实就是 ...
- 前端学习之路之CSS (二)
Infi-chu: http://www.cnblogs.com/Infi-chu/ id选择器id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式,CSS 中 id 选择器以 &quo ...
- Linux系统搭建GitLab---阿里云Centos7搭建Gitlab踩坑
一.简介 GitLab,是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目安装. 它拥有与GitHub类似的功能,能 ...
- 【Machine Learning】决策树之ID3算法 (2)
决策树之ID3算法 Content 1.ID3概念 2.信息熵 3.信息增益 Information Gain 4. ID3 bias 5. Python算法实现(待定) 一.ID3概念 ID3算法最 ...