Cod sursa(job #2036096)

Utilizator SchnitzelMannPavaloiu Gabriel SchnitzelMann Data 10 octombrie 2017 11:59:49
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
/*struct Node
{
    int data;
    struct Node *next;
};
void push(struct Node** head_ref, int new_data)
{
    struct Node* new_node = (struct Node*) malloc(sizeof(struct Node)),temp=*head_ref;
    new_node->data  = new_data;
    new_node->next = NULL;
    if(temp==NULL)
        (*head_ref)= new_node;
    while(temp->next!=NULL&&temp->data<=new_data)temp=temp->next;

}
void deleteNode(struct Node **head_ref, int key)
{
    struct Node* temp = *head_ref, *prev;
    if (temp != NULL && temp->data == key)
    {
        *head_ref = temp->next;
        free(temp);
        return;
    }
    while (temp != NULL && temp->data != key)
    {
        prev = temp;
        temp = temp->next;
    }
    if (temp == NULL) return;
    prev->next = temp->next;

    free(temp);
}*/
int arr[5000001];
int d[5000001];
int st,dr,i,n,k;
void solve()
{
    if(st<=dr&&d[st]==i-k)
        st++;
    while(st<=dr&&arr[i]<=arr[d[dr]])
        dr--;
    d[++dr]=i;
}
int main()
{
    long long s=0;
    in>>n>>k;
    for(i=1;i<k;i++)
    {
        in>>arr[i];
        solve();
    }
    for(;i<=n;i++)
    {
        in>>arr[i];
        solve();
        s+=arr[d[st]];
    }
    out<<s;
    return 0;
}