直接让这个位置弄得没心情了。总体还是比较水的,单调队列题目。
#include<iostream>
#include<stdio.h>
#define inf 1000000000
using namespace std;
const int maxx=200005;
int q[maxx],ko[maxx],sum[maxx];
int main()
{
int t,n,k,i,start,end,ans,head,tail;
cin>>t;
while(t--)
{
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
{
scanf("%d",&ko[i]);
ko[i+n]=ko[i];
}
sum[0]=0;
for(i=1;i<=2*n;i++)
sum[i]=sum[i-1]+ko[i];
ans=-inf;
head=0;
tail=0;
for(i=1;i<=2*n;i++)
{
while(head<tail&&sum[q[tail-1]]>sum[i-1])
tail=tail-1;
q[tail++]=i-1;
while(head<tail&&i-q[head]>k)
head=head+1;
if(ans<sum[i]-sum[q[head]])
{
ans=sum[i]-sum[q[head]];
start=q[head]+1>n?(q[head]+1-n):q[head]+1;
end=i>n?(i-n):i;
}
}
printf("%d %d %d\n",ans,start,end);
}
return 0;
}