Cod sursa(job #1346373)

Utilizator Pintilie_AndreiFII-Pintilie Andrei Pintilie_Andrei Data 18 februarie 2015 10:48:42
Problema Deque Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#define N 5000002
using namespace std;
struct str
{
    int nr,p;
};
str dq[N];
int st,dr,n,k;
int a[N];
long long sol;
void Afisare()
{
    for(int i=st; i<=dr; i++)
    cout<<dq[i].nr<<" ";
    cout<<"\n";
}
int main()
{
    ifstream fin("deque.in");
    fin>>n>>k;
    int i;
    for(i=1; i<=n; i++)
    fin>>a[i];
    st=dr=0;
    for(i=1; i<=k; i++)
    {
        if(dq[dr].nr>=a[i])
        {
            while(dq[dr].nr>=a[i] && dr>st)
            dr--;
            dq[dr].nr=a[i];
        } else dq[++dr].nr=a[i];
        dq[++dr].nr=a[i];
        dq[dr].p=i;
    }
    sol+=dq[st].nr;
//Afisare();
    for(i=k+1; i<=n; i++)
    {
        if(dq[st].p < i-k+1)
        st++;
        if(dq[dr].nr>=a[i])
        {
            while(dq[dr].nr>=a[i] && dr>st)
            dr--;
            dq[dr].nr=a[i];
        } else dq[++dr].nr=a[i];
        dq[dr].p=i;
        sol+=dq[st].nr;
       // Afisare();
    }
    ofstream fout("deque.out");
    fout<<sol<<" ";


    return 0;
}