Cod sursa(job #2367892)

Utilizator stefanturcut@yahoo.comTurcut Stefan [email protected] Data 5 martie 2019 12:45:31
Problema Deque Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("deque.in");
ofstream fout("deque.out");
int n,m;//,v[5000001];
int A[5000001],Deque[5000001];
//        fin>>v[i];
//        if(i>=m)
//        {
//            minn=v[i-m+1];
//            for(int j=i-m+2;j<=i;j++)
//            {
//                if(minn>v[j])
//                {
//                    minn=v[j];
//                }
//            }
//            s+=minn;
int main()
{
    fin>>n>>m;
    int a,b,c,minn,s=0;int Front = 1, Back = 0;
    for(int i=1;i<=n;i++)
    {
        fin>>A[i];
    }
    for(int i=1;i<=n;i++)
    {
            while (Front <= Back && A[i] <= A[ Deque[Back] ]) Back--;
		/// Adaugam pozitia elementului curent in deque
		Deque[++Back] = i;

		/// Daca elementul minim coincide cu cel de pe pozita i-m, ii eliminam pozitia din deque, deoarece acesta nu mai conteaza pentru pasii >= i
		if (Deque[Front] == i-m) Front++;

		/// Afisam minimul, acesta aflandu-se in varful deque-ului
		if (i >= m) s += A[ Deque[Front]];
    }
    for(int i=1;i<=n;i++)
    {
        fout<<Deque[i]<<endl;
    }
    fout<<s;
    return 0;
}