Mai intai trebuie sa te autentifici.

Cod sursa(job #2074474)

Utilizator Andrei243Nitu Mandel Andrei Andrei243 Data 24 noiembrie 2017 17:27:39
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
using namespace std;
int n[5000010];
int exp[5000010];
int capat;
int nr,k;
long long suma;
void stergere_stanga(int i)
{
    int j;
    for(j=0; j<=capat-i; j++)
    {
        n[j]=n[j+i];
        exp[j]=exp[j+i];
    }
    capat-=i;
}

void stergere_dreapta(int i)
{
    capat-=i;
}


void verificare_dreapta(int x){
int j=0;
int c=capat;
while(x<=n[c]){j++;c--;}
if(j>0)stergere_dreapta(j);

}
void verificare_stanga(int x){
int j=0;
int c=0;
while(x<=n[c]){
j++;
c++;
}
if(j>0)stergere_stanga(j);

}

void update()
{
    for(int t=0; t<=capat; t++)exp[t]--;
    if(exp[0]==0)stergere_stanga(1);

}

int minim()
{
    int min=n[0];
    for(int i=0; i<=capat; i++)if(n[i]<min)min=n[i];
    return min;
}

void adaugare(int x){
if(x<minim()){n[0]=x;exp[0]=k;capat=0;}

else{
verificare_dreapta(x);
verificare_stanga(x);
capat++;
if(capat<0){capat=0;cout<<"coada goala "<<x;}
n[capat]=x;
exp[capat]=k;
update();}
}




int main()
{capat=0;
ifstream a("deque.in");
ofstream b("deque.out");
a>>nr>>k;
a>>n[0];
exp[0]=k;
int c;
for(int i=1;i<k;i++){
a>>c;
adaugare(c);
}
int suma=minim();
for(int i=k;i<=nr;i++){

a>>c;
adaugare(c);
suma+=minim();
}
b<<suma;

    return 0;
}