Cod sursa(job #2042070)

Utilizator biaiftimeIftime Bianca biaiftime Data 18 octombrie 2017 00:01:48
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#define Nmax 5000001
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
struct numar
{
    int poz;
    long long val;
}dq[Nmax];
int n,k;
int pr,ul;
long long s;
int main()
{
    int i;
    long long x;
    fin>>n>>k;
    fin>>x;
    dq[1].val=x; dq[1].poz=1; pr=ul=1;
    for(i=2;i<=n;i++)
    {
        //varful cozii va fi mereu minimul secventei curente
        fin>>x;
        //verificam daca minimul din coada si x pot face parte din aceeasi secventa
        if(i-dq[pr].poz+1>k) pr++; //scoatem minimul din coada
        //scoatem elementele din coada mai mari decat x, care nu mai au sansa sa fie minim in secventa cu x
        while(ul>=pr&&x<dq[ul].val)ul--;
        //il adaugam pe x in coada
        ++ul; dq[ul].val=x; dq[ul].poz=i;
        //verificam daca avem o secventa de lungime k
        if(i>=k)s=s+dq[pr].val;
    }
    fout<<s;
    return 0;
}