Cod sursa(job #1423245)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 21 aprilie 2015 16:57:50
Problema Deque Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 1.69 kb
#include <fstream>
using namespace std;
 
template <typename T>
class deque{
    T* buf;
    int fr, bk, sz;
public:
    const int bufsz;
    deque(const int Bufsz):
        fr(0),
        bk(Bufsz-1),
        sz(0),
        bufsz(Bufsz){
        buf = new T[bufsz]; }
    ~deque(){
        delete[] buf; }
    T& front(){
        return buf[fr]; }
    T& back(){
        return buf[bk]; }
    void push_back(const T val){
        ++bk;
        if(bk == bufsz){
            bk = 0; }
        buf[bk] = val;
        ++sz; }
    void push_front(const T val){
        --fr;
        if(fr == -1){
            fr = bufsz-1; }
        buf[fr] = val;
        ++sz; }
    void pop_back(){
        --bk;
        if(bk == -1){
            bk = bufsz-1; }
        --sz; }
    void pop_front(){
        ++fr;
        if(fr == bufsz){
            fr = 0; }
        --sz; }
    bool empty(){
        return sz == 0; } };
 
int main(){
    ifstream f("deque.in");
    int n, k, val;
    f >> n >> k;
    deque<int> dq(k), elemente(k);
    for(int i = 0; i < k; ++i){
        f >> val;
        while((!dq.empty()) && (dq.back() >= val)){
            dq.pop_back(); }
        dq.push_back(val);
        elemente.push_back(val); }
    int suma = dq.front();
    for(int i = k; i < n; ++i){
        if((!dq.empty()) && dq.front() == elemente.front()){
            dq.pop_front(); }
        elemente.pop_front();
        f >> val;
        elemente.push_back(val);
 
        while((!dq.empty()) && (dq.back() >= val)){
            dq.pop_back(); }
        dq.push_back(val);
 
        suma += dq.front(); }
     
    ofstream g("deque.out");
    g << suma;
    return 0; }