Cod sursa(job #290390)

Utilizator snaked31Stanica Andrei snaked31 Data 27 martie 2009 21:09:20
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <stdio.h>
#include <algorithm>
#include <deque>

using namespace std;


deque <int> q;
deque <int> pq;
int n, k, x, i;
long long sol;


void read()

{
    scanf("%d %d ", &n, &k);
    scanf("%d ", &x);
    q.push_back(x);
    pq.push_back(1);

    for (i=2; i<=k; ++i)
    {
    	scanf("%d ", &x);
		int ok = 1;
        while (ok && q.size() > 0)
        {
			ok = 1;
			if (q[q.size()-1] > x)
			{
				ok = 1;
        		q.pop_back();
	            pq.pop_back();
			}
			else
				ok = 0;
        }
        q.push_back(x);
        pq.push_back(i);
    }
    sol = q[0];
}


void solve()

{
    for (i=k+1; i<=n; ++i)
    {
        scanf("%d ", &x);
		int ok = 1;
        while (ok && q.size() > 0)
        {
			ok = 1;
			if (q[q.size() - 1 ] > x)
			{
				ok = 1;
        		q.pop_back();
        		pq.pop_back();
			}
			else
				ok = 0;
        }
        
        q.push_back(x);
        pq.push_back(i);
        if (pq[0] == i-k)
        {
            q.pop_front();
            pq.pop_front();
        }
        sol += q[0];
    }
}


void write()

{
	printf("%lld\n", sol);
}


int main()

{
	freopen("deque.in", "r", stdin);
    freopen("deque.out","w",stdout);

    read();
    solve();
    write();

	return 0;
}