Cod sursa(job #1302336)

Utilizator RaileanuCristian Raileanu Raileanu Data 26 decembrie 2014 20:18:21
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
using namespace std;
#define M 5000005
int a,n,k,i, maxarb[2*M+100] ;
long long rez;
ifstream f1("deque.in");
ofstream f2("deque.out");

void update(int nod, int st, int dr,int poz,int val)
{
    if (st==dr )
        { maxarb[nod]=val;
          return; }

    int m=(st+dr)/2;
    if (poz<=m ) update(nod*2,st,m,poz,val );
            else update(nod*2+1,m+1,dr,poz,val);

    maxarb[nod]=min(maxarb[2*nod], maxarb[2*nod+1] );
}

int query(int nod, int st, int dr,int i, int j )
{
        if (i<=st && dr<=j )
            return maxarb[nod];

        int m= (st+dr)/2, v1=2*M,v2=2*M;
        if (i<=m ) v1= query(nod*2,st,m,i,j );
        if (j>m ) v2= query(nod*2+1,m+1,dr,i,j );

        return min(v1,v2);
}

int main()
{
    f1>>n>>k;
    for (i=1; i<=n; i++)
        { f1>>a;
          update(1,1,n,i,a);
        }

    for (i=1; i<=n-k+1; i++)
        rez+= query(1,1,n,i,i+k-1);
    f2<<rez;
    f2.close();
    return 0;
}