Pagini recente » Cod sursa (job #1686939) | Cod sursa (job #1578099) | Cod sursa (job #1670821) | Cod sursa (job #2927714) | Cod sursa (job #2036096)
#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;
}