Cod sursa(job #1050844)

Utilizator vlad.florescu94FMI Florescu Vlad - Adrian vlad.florescu94 Data 9 decembrie 2013 11:21:49
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include<fstream>
#include<algorithm>
#define minini -10000001
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
struct dub{
long long val,poz;
};

long long n,k,v[5000001],i,j,nr,h,loc;
dub heap[5000001];
long long sum;

long long minim(long long a,long long b)
{
    if(a<b)
        return a;
    return b;
}
int main()
{
    f>>n>>k;
    heap[0].val=minini;
    for(i=1;i<=k;i++)
      {
          f>>v[i];
          heap[i].val=v[i];
          heap[i].poz=i;
          j=i;
          while(heap[j].val<heap[j/2].val)
            {
              swap(heap[j],heap[j/2]);
              j/=2;
            }
      }
    sum+=heap[1].val;
    nr=k;
    for(i=k+1;i<=n;i++)
      {
         nr++;
         f>>v[i];
         heap[nr].val=v[i];heap[nr].poz=i;
         j=nr;
          while(heap[j].val<heap[j/2].val)
            {
              swap(heap[j],heap[j/2]);
              j/=2;
            }
        while(!(heap[1].poz>=i-2&&heap[1].poz<=i))
            {
                swap(heap[1],heap[nr]);
                nr--;
                for(h=1;h<=nr;h++)
                {
                  loc=h;
                  while(heap[loc].val<heap[loc/2].val)
                    {
                      swap(heap[loc],heap[loc/2]);
                      loc/=2;
                    }
                }
            }
       sum+=heap[1].val;
      }
   g<<sum;
   f.close();g.close();
   return 0;
}