Pagini recente » Cod sursa (job #1655606) | Cod sursa (job #1757590) | Cod sursa (job #916406) | Cod sursa (job #2217390) | Cod sursa (job #2205015)
#include <fstream>
#include <deque>
using namespace std;
ifstream fin("secv2.in");
ofstream fout("secv2.out");
#define DM 50000
int n,k;
int c1,c2,maxsum = -12500000;
int val[DM + 1], sp[DM + 1];
void make_sp(){
sp[1] = val[1];
for(int i = 2; i <= n; i++) {
sp[i] = sp[i - 1] + val[i];
}
}
void solve() {
deque < pair < int, int > > minDq;
for(int i = k + 1; i <= n; i++) {
while(!minDq.empty() && sp[i - k] < minDq.back().first) {
minDq.pop_back();
}
minDq.push_back(make_pair(sp[i - k], i - k));
if(minDq.front().second > i - k) {
minDq.pop_front(); //n are rost
}
if(maxsum < sp[i] - minDq.front().first) {
c1 = minDq.front().second + 1;
c2 = i;
maxsum = sp[i] - minDq.front().first;
}
}
}
int main() {
fin >> n >> k;
for(int i = 1; i <= n; i++) {
fin >> val[i];
}
make_sp();
solve();
if(n == k) {
fout << "1" << " " << n << " " << sp[n];
} else{
fout << c1 << " " << c2 << " " << maxsum;
}
}