Cod sursa(job #1046709)

Utilizator Dayanna000Amegica Dayanna Dayanna000 Data 3 decembrie 2013 13:14:25
Problema Deque Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1.78 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
queue <int>Q;
int a[5000001],n;
void next(int a[],int n)
  {
      int i,ok=1,pozi=0,huh;
      i=1;
      while(ok==1)
        {
            if(2*i<=n && 2*i+1<=n)
               {
                   if(a[2*i]<a[2*i+1])
                     pozi=2*i;
                     else
                     pozi=2*i+1;
                   if(a[i]<a[pozi])
                     pozi=0;
               }
               else
            if(2*i<=n && a[2*i]<a[i])
              pozi=2*i;
               else
            if(2*i+1<=n && a[2*i+1]<a[i])
               pozi=2*i+1;
            if(pozi==0)
               ok=0;
               else
               {
                   huh=a[i];
                   a[i]=a[pozi];
                   a[pozi]=huh;
                   i=pozi;
                   pozi=0;
               }
        }
  }
int main()
{
    ifstream f("deque.in");
    ofstream g("deque.out");
    int i,poz,x,s,k,aux,y;
    f>>n>>k>>a[1];
    Q.push(a[1]);
    for(i=2;i<=k;++i)
       {
          f>>a[i];
          Q.push(a[i]);
          x=i;
          poz=i/2;
          while(poz>=1)
            {
                if(a[x]<a[poz])
                  {
                      aux=a[poz];
                      a[poz]=a[x];
                      a[x]=aux;
                  }
                x=poz;
                poz=poz/2;
            }
       }
    s=a[1];
    for(i=1;i<=n-k;++i)
      {
          f>>x;
          for(int j=1;j<=k;j++)
            if(a[j]==Q.front())
               {
                   a[j]=a[1];
                   a[1]=x;
                   break;
               }
          Q.pop();
          Q.push(x);
          next(a,k);
          s=s+a[1];
      }
    g<<s;
    f.close();
    g.close();
    return 0;
}