悲惨的评测结果
这道题超多细节,搞了我一个小时,其实题并不难,只是我比较粗心*_*。
具体看代码和注释:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
long long a[100010],q[100010];
long long n,l,r,h=1,t,ans=-2147483647;
int main()
{
cin>>n>>l>>r;
for(int i=1; i<=n; i++)
{
scanf("%lld",&a[i]);
a[i]+=a[i-1]; //求前缀和
}
for(int i=l; i<=n; i++) //从l开始做,因为l之前会出界
{
while(h<=t&&a[i-l]<=a[q[t]]) //i-l表示假期起点
t--;
q[++t]=i-l;
while(h<=t&&q[h]<i-r)
h++;
ans=max(ans,a[i]-a[q[h]]); //求享受指数
}
cout<<ans;
return 0;
}