Cod sursa(job #1049753)

Utilizator albupetruFMI Albu Petru albupetru Data 7 decembrie 2013 19:21:33
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.83 kb
#include<fstream>
#include<deque>
using namespace std;
/*
struct nod{
int inf,exp;
nod *legs,*legd;}*d,*s;

long long int i,n,x,val,k;
long long int suma;

void pop_left(nod* &s)
{
    if(s==NULL) return;
    nod *p=s;
    if(s->legd)
    {s=s->legd; s->legs=NULL;}
    else s=NULL;

    delete p;
}

void pop_right(nod* &d)
{
    if(d==NULL) return;
    nod *p=d;
    if(d->legs)
    {d=d->legs; d->legd=NULL;}
    else d=NULL;

    delete p;
}

void add_right(int x, nod* &d)
{
    if(d==NULL){d=new nod; d->legs=d->legd=NULL; d->inf=x; s=d; return;}
    nod* p=new nod;
    p->inf=x;
    p->legs=d;
    d->legd=p;
    p->legd=NULL;
    d=p;
}

int main()
{
    ifstream f("deque.in");
    ofstream g("deque.out");
    f>>n>>k;
    s=new nod;
    d=s=NULL;
    for(i=1;i<=k;i++)
    {
        f>>val;
        while(d!=NULL && d->inf>val)
            pop_right(d);
        add_right(val,d);
        d->exp=i;
    }
    suma=s->inf;
    for(i=k+1;i<=n;i++)
    {
        if(s->exp+k==i)
            pop_left(s);
        f>>val;
        while(d!=NULL && d->inf>val)
            pop_right(d);
        add_right(val,d);
        d->exp=i;
        suma+=s->inf;
    }

    g<<suma;
    f.close();
    g.close();
    return 0;
}
*/

deque <long long int> my_deq;
//deque <long long int> v
long long int i,n,k,suma;
long long int v[5000001];
int main()
{
    ifstream f("deque.in");
    ofstream g("deque.out");
    f>>n>>k;
    for(i=0;i<n;i++)
    {
        f>>v[i];
        while(my_deq.empty()==0 && v[my_deq.back()]>=v[i])
            my_deq.pop_back();
        my_deq.push_back(i);
        if(my_deq.front()==i-k)
            my_deq.pop_front();
        if(i>=k-1)
            suma+=v[my_deq.front()];
    }
    g<<suma;
    f.close();
    g.close();
    return 0;
}