Cod sursa(job #1052768)

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