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#include #include #include #include #include #include #include #include