Pagini recente » Cod sursa (job #1505240) | Cod sursa (job #1998995) | Cod sursa (job #1640631) | Cod sursa (job #1839091) | Cod sursa (job #3126585)
#include <iostream>
#include <fstream>
using namespace std;
typedef struct Nod {
struct Nod* prev;
struct Nod* next;
long long valoare;
}Nod, *PNod;
PNod createNod(long long int valoare){
PNod newnode = new Nod;
newnode->valoare = valoare;
newnode->prev = NULL;
newnode->next = NULL;
return newnode;
}
class Deque{
int a[5000010];
PNod front;
PNod back;
long long size;
public:
Deque(){
this->front = NULL;
this->back = NULL;
this->size = 0;
}
void pushFront(long long int x){
PNod nou = createNod(x);
if (size == 0){
front = nou;
back = nou;
} else {
nou->next = front;
front->prev = nou;
this->front = nou;
}
++size;
}
void pushBack(long long int x){
PNod nou = createNod(x);
if (size == 0){
front = nou;
back = nou;
} else {
nou->prev = back;
back->next = nou;
back = nou;
}
++size;
}
void popFront() {
if (size == 0)
return;
if (front == back){
delete front;
front = NULL;
back = NULL;
}
else {
PNod temp = front->next;
temp->prev = NULL;
delete front;
front = temp;
}
size--;
}
void popBack() {
if (size == 0)
return;
if (front == back){
delete front;
front = NULL;
back = NULL;
}
else {
PNod temp = back->prev;
temp->next = NULL;
delete back;
back = temp;
}
size--;
}
void printfromFront() {
PNod parcurgere = front;
while (parcurgere != NULL){
cout<<parcurgere->valoare<<" ";
parcurgere = parcurgere->next;
}
}
long long int getFront() {
if (front != NULL)
return front->valoare;
}
long long int getBack() {
if (back != NULL)
return back->valoare;
}
long long int getSize() {return this->size;}
};
Deque de;
long long a[5000030];
long long n, k;
long long s = 0;
int main() {
ifstream f("deque.in");
ofstream g("deque.out");
f>>n>>k;
for (int i=1; i<=n; i++)
f>>a[i];
for (int i=1; i<=n; i++){
while (de.getSize() != 0 && a[i] < de.getBack())
de.popBack();
de.pushBack(a[i]);
if (i >= k && de.getFront() == a[i - k])
de.popFront();
if (i >= k)
s += de.getFront();
}
g<<s;
f.close();
g.close();
return 0;
}