Cod sursa(job #1052784)

Utilizator Dayanna000Amegica Dayanna Dayanna000 Data 11 decembrie 2013 19:55:29
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
using namespace std;
long long a[5000001];
int n,ind[5000001],k,nr;
void adaug(int poz)
  {
      while(poz>1 && a[ind[poz/2]]>a[ind[poz]])
        {
            swap(ind[poz],ind[poz/2]);
            poz=poz/2;
        }
  }
void sj(int poz,int nre)
  {
      int st,dr,mini,aux;
      if(2*poz>nre)
         return;
      int pozi=2*poz;
      if(2*poz+1<=nre && a[ind[2*poz+1]]<a[ind[2*poz]])
         pozi++;
      if(a[ind[pozi]]<a[ind[poz]])
         {
             swap(ind[poz],ind[pozi]);
             sj(pozi,nre);
         }
  }
int main()
{
    ifstream f("deque.in");
    ofstream g("deque.out");
    long long s;
    int i;
    f>>n>>k>>a[1];
    ind[1]=1;
    for(i=2;i<=k;++i)
       {
           f>>a[i];
           ind[i]=i;
           adaug(i);
       }
    s=a[ind[1]];
    nr=k;
    for(i=k+1;i<=n;++i)
      {
          f>>a[i];
          while(i-ind[1]+1>k)
            {
                ind[1]=ind[nr];
                nr--;
                sj(1,nr);
            }
          nr++;
          ind[nr]=i;
          adaug(nr);
          s=s+a[ind[1]];
      }
    g<<s;
    f.close();
    g.close();
    return 0;
}