Cod sursa(job #1205616)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 7 iulie 2014 14:33:12
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.84 kb
#define infinit 1<<28
#define maxim 11000000
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen("deque.in","r");
FILE *g=fopen("deque.out","w");
long long sum=0;

int n,k,adi[11000001],pos,val;

inline void update(int st,int dr,int nod)
{
if (nod>maxim) return;;
if (st==dr&&st==pos) {adi[nod]=val;}
                           else {int mijl=(st+dr)/2;
                                    if (pos<=mijl) update(st,mijl,nod*2);
                                                   else update(mijl+1,dr,nod*2+1);

                                    if (nod*2<=maxim) adi[nod]=adi[nod*2];
                                    if (nod*2+1<=maxim) adi[nod]=min(adi[nod*2],adi[nod*2+1]);
                                    }
}


int main()
{int i,j,x;
fscanf(f,"%d %d",&n,&k);

for (i=1;i<=11000000;i++) adi[i]=infinit;
for (i=1;i<=k;i++)  {fscanf(f,"%d",&x);
                                 pos=i;
                                 val=x;
                                 update(1,n,1);}
sum=adi[1];
for (i=k+1;i<=n;i++) {pos=i-k;
                                   val=infinit;
                                    update(1,n,1);
                                    if (i%10000==0) {i++;
                                                             i--;
                                                             }
                                    fscanf(f,"%d",&x);
                                    pos=i;
                                    val=x;
                                    update(1,n,1);

                                    sum+=1LL*adi[1];

                                    if (sum>0) {i++;
                                                       i--;
                                                      }
                                    }
fprintf(g,"%lld\n",sum);
return 0;
}