Cod sursa(job #1289423)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 9 decembrie 2014 21:16:22
Problema Deque Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>
#include <stdlib.h>
int v[5000001],s[10000001];
int main()
{
    int i,n,k,p,u,min;
    long long sum;
    FILE *fin,*fout;
    fin=fopen("deque.in","r");
    fout=fopen("deque.out","w");
    fscanf(fin,"%d%d",&n,&k);
    for(i=1; i<=n; i++)
        fscanf(fin,"%d",&v[i]);
    p=1;
    s[p]=1;
    u=2;
    min=v[1];
    for(i=2; i<=k; i++)
    {
        while(v[i]<v[s[u-1]] && u>p)
            u--;
        s[u]=i;
        u++;
        if(v[i]<min)
            min=v[i];
    }
    sum=(long long)min;
    for(; i<=n; i++)
    {
        while(s[p]<i-k+1 && p<u)
            p++;
        while(v[i]<v[s[u-1]] && u>p)
            u--;
        s[u]=i;
        u++;
        sum+=(long long)v[s[p]];
    }
    fprintf(fout,"%lld",sum);

    fclose(fin);
    fclose(fout);

    return 0;
}