Cod sursa(job #1067128)

Utilizator Catalina_BrinzaBrinza Catalina Catalina_Brinza Data 26 decembrie 2013 13:40:11
Problema Deque Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
//
//  main.cpp
//  deque+
//
//  Created by Catalina Brinza on 12/25/13.
//  Copyright (c) 2013 Catalina Brinza. All rights reserved.
//

#include <fstream>
#include <vector>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
struct strut
{
    int a,b;
};
vector <strut> h;
int main()
{
    int s=0;
    strut q;
    q.a=0;
    q.b=0;
    h.push_back(q);
    int n,k,i,x;
    in>>n>>k;
    for (i=1;i<=n;++i)
    {
        in>>x;
        q.a=x;
        q.b=i;
        h.push_back(q);
            int fi=h.size()-1;
            while (h[fi].a<h[fi/2].a && fi>1)
            {
                swap(h[fi],h[fi/2]);
                fi=fi/2;
            }
    
        if (i>=k)
        {
            while (h[1].b<i-k+1)
            {
                swap(h[1],h[h.size()-1]);
                h.pop_back();
                fi=1;
                while (fi*2+1<h.size() && (h[fi].a>h[fi*2].a || h[fi].a>h[fi*2+1].a))
                {
                    if (h[fi*2+1].a<h[fi*2].a) {swap(h[fi],h[fi*2+1]); fi=fi*2+1;}
                    else { swap (h[fi*2],h[fi]);fi=fi*2;}
                }
                if (fi*2==h.size()-1 && h[fi].a>h[fi*2].a) swap(h[fi*2],h[fi]);
                
            }
            
            s+=h[1].a;
    
        }

    }
    out<<s;
    in.close();
    out.close();
    return 0;
}