Cod sursa(job #2205021)

Utilizator GarboteialexGarbotei Alex Garboteialex Data 17 mai 2018 18:02:53
Problema Secventa 2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <deque>

using namespace std;

ifstream fin("secv2.in");
ofstream fout("secv2.out");

#define DM 50000

int n,k;
int c1 = 1,c2 = k,maxsum = -1250000000;
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; 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(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;
    }
    
}