Cod sursa(job #1608257)

Utilizator zertixMaradin Octavian zertix Data 21 februarie 2016 22:21:10
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

int deq1[100005],deq2[100005],n,k,v[100005],maxn;

int main()
{
    freopen("vila2.in","r",stdin);
    freopen("vila2.out","w",stdout);
    scanf("%d%d",&n,&k);
    for (int i=1;i<=n;++i)
        scanf("%d",&v[i]);
    int Back1=1,Front1=1;
    deq1[1]=1;
    int Back2=1,Front2=1;
    deq2[1]=1;

    for (int i=2;i<=n;++i)
    {

        while (Front1<=Back1 && v[deq1[Back1]]>=v[i])
                --Back1;
        deq1[++Back1]=i;
        if (deq1[Front1]==i-k-1)
            ++Front1;
        while (Front2<=Back2 && v[deq2[Back2]]<=v[i])
                --Back2;
        deq2[++Back2]=i;
        if (deq2[Front2]==i-k-1)
            ++Front2;
        if (abs(v[deq2[Front2]]-v[deq1[Front1]])>maxn)
            maxn=v[deq2[Front2]]-v[deq1[Front1]];
    }
    if (abs(v[deq2[Front2]]-v[deq1[Front1]])>maxn)
            maxn=v[deq2[Front2]]-v[deq1[Front1]];
    printf("%d ",maxn);
    return 0;
}