Cod sursa(job #1257712)

Utilizator bullseYeIacob Sergiu bullseYe Data 8 noiembrie 2014 09:46:19
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
//dq.push_front(val)
//dq.push_back(val)
//dq.back()
//dq.front()
//ultimele 2 returneaza primul element din dq sau ultimul
#include <cstdio>
#include <deque>
#define DMAX 5000010
using namespace std;

void citire();
void afisare();
void rez();

deque <int> dq;
int n, k, a[DMAX+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1];
long long int sum;

int main()
{
    citire();
    rez();
    afisare();
    return 0;
}

void citire()
{
    FILE*fin=fopen ("deque.in", "r");
    fscanf(fin, "%d %d", &n, &k);
    int i;
    for (i=1; i<=n; ++i)
        fscanf(fin, "%d", &a[i]);
    fclose(fin);
    return;
}

void rez()
{
    int i;//in dq avem pozitiile din vector
    for (i=1; i<=n; ++i)
    {
        if (!dq.empty() && dq.front()==i-k)
            dq.pop_front();
        while (!dq.empty() && a[dq.back()]>a[i])
                dq.pop_back();
        dq.push_back (i);
        if (i>=k) sum+=a[dq.front()];
    }
}

void afisare()
{
    FILE*fout=fopen ("deque.out", "w");
    fprintf(fout, "%Lld", sum);
    fclose(fout);
    return;
}