Cod sursa(job #1066996)

Utilizator Catalina_BrinzaBrinza Catalina Catalina_Brinza Data 25 decembrie 2013 22:53:49
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.88 kb
//
//  main.cpp
//  deque
//
//  Created by Catalina Brinza on 12/3/13.
//  Copyright (c) 2013 Catalina Brinza. All rights reserved.
//
#include <fstream>
#include <vector>
using namespace std;
ifstream f("/Users/catalinabrinza/Documents/untitled folder/deque/deque/deque.in");
ofstream g("/Users/catalinabrinza/Documents/untitled folder/deque/deque/deque.out");

struct bla
{
    int val,poz;
};
  vector<bla> a;
int n;
void coboara(int i)
{
    while ((a[i].val>a[i*2+1].val || a[i].val>a[i*2].val) && (i*2+1<=n))
   
        if (a[i*2+1].val<a[i*2].val)
        {
            bla w;
            w=a[i];
            a[i]=a[i*2+1];
            a[i*2+1]=w;
            i=(i<<1)+1;
        }
        else
        {
            bla w;
            w=a[i];
            a[i]=a[i*2];
            a[i*2]=w;
            i=i<<1;
        }
    if (a[i*2].val<a[i].val)
    {
        bla w;
        w=a[i];
        a[i]=a[i*2];
        a[i*2]=w;
        i=i<<1;
    }
    return;
}

void urca(int in)
{
    bla aux;
    while (a[in].val<a[in/2].val && in!=1)
    {
        aux=a[in];
        a[in]=a[in/2];
        a[in/2]=aux;
        in=in/2;
    }
    return;
}

int main()
{int i,x,j,k,s=0,y,z,in,b;
    bla w,aux;
 
    w.val=0; w.poz=0;
    a.push_back(w);
    f>>n>>k;
 
    for (i=1;i<=n;++i)
    {
        f>>x;
        if (i<=k)
        {
            w.val=x;
            w.poz=i;
            a.push_back(w);
            urca(i);
            if (i==k) s+=a[1].val;
        }
        else
        {
                if (a[1].poz<=i-k)
                {
                    a[1]=a[n];
                    a.pop_back();
                    coboara(1);

                }/*
                else{
                    w.val=x;
                    w.poz=i;
                    a.push_back(w);
                    urca(a.size()-1);
                }*/
            
            s+=a[1].val;
        }
    }
    g<<s;
    return 0;
}