Cod sursa(job #2131490)

Utilizator mihaicivMihai Vlad mihaiciv Data 14 februarie 2018 19:00:06
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <deque>
#define nmax 2500001
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
deque<long long int> a,poz ;
long long int n,k,v[2*nmax];
void citire() {
    f>>n>>k;
    for (int i=1;i<=n;i++) {
        f>>v[i];
    }
}
void Adauga(long long int val, long long int pos) {
    bool da=true;
    while (!a.empty() && da) {
        if (a[a.size()-1]>val ) {
            a.pop_back();
            poz.pop_back();
        }
        else {
            da=false;
        }
    }
    a.push_back(val);
    poz.push_back(pos);
}
void rez() {
    a.push_back(v[1]);
    poz.push_back(1);
    long long int Suma=0;
    for (int i=2;i<=n;i++) {
        Adauga(v[i],i);
        if (i>=k) {
            Suma=Suma+a[0];
            //cout<<a[0]<<"\n";
            if (i-k+1>=poz[0]) {
                a.pop_front();
                poz.pop_front();
            }
        }
    }
    g<<Suma;
}
int main() {
    citire();
    rez();
    return 0;
}