#include "bits/stdc++.h"
using namespace std;
const int N = 100005;
int s[N<<1],v[N<<1];
int t,n,k;
deque<int>d;
void init(){
d.clear();
memset(s,0,sizeof s);
memset(v,0,sizeof v);
cin >> n >> k;
for(int i=1 ;i<=n;i++){
cin >> s[i];
s[i+n]=s[i];
}
for(int i=1;i<=n<<1;i++){
v[i] = v[i-1] + s[i];
}
}
void solve(){
init();
int ans =INT_MIN , l,r;
for(int i=1 ; i<=n+k-1;i++){
while (!d.empty() && d.front() <= i - k - 1 ) d.pop_front(); // 弹头
while (!d.empty() && v[i-1] < v[d.back()]) d.pop_back(); //弹尾 保持最小值
d.push_back(i-1);
if(ans < v[i] - v[d.front()]){
l = d.front()+1;
r=i;
ans = v[i] - v[d.front()];
}
}
if(r>n)r=r%n;
if(l>n)l=l%n;
cout << ans << " " << l << " " << r << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin >> t;
while (t--){
solve();
}
return 0;
}
Max Sum of Max-K-sub-sequence(单调队列)
猜你喜欢
转载自blog.csdn.net/weixin_53013914/article/details/121151603
今日推荐
周排行