Pagini recente » Cod sursa (job #38408) | Cod sursa (job #2222351) | Cod sursa (job #2334250) | Cod sursa (job #2565833) | Cod sursa (job #3126677)
#include <iostream>
#include <fstream>
using namespace std;
struct Nod {
struct Nod* prev;
struct Nod* next;
int valoare;
};
Nod* createNod(int valoare){
Nod* newnode = new Nod;
newnode->valoare = valoare;
newnode->prev = NULL;
newnode->next = NULL;
return newnode;
}
class Deque{
Nod* front;
Nod* back;
int size;
public:
Deque(){
this->front = NULL;
this->back = NULL;
this->size = 0;
}
void pushFront(int x){
Nod* nou = createNod(x);
if (size == 0){
front = nou;
back = nou;
} else {
nou->next = front;
front->prev = nou;
this->front = nou;
}
++size;
}
void pushBack(int x){
Nod* 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 {
front = front->next;
delete front->prev;
front->prev = NULL;
}
--size;
}
void popBack() {
if (size == 0)
return;
if (front == back){
delete front;
front = NULL;
back = NULL;
}
else {
back = back->prev;
delete back->next;
back->next = NULL;
}
--size;
}
void printfromFront() {
Nod* parcurgere = front;
while (parcurgere != NULL){
cout<<parcurgere->valoare<<" ";
parcurgere = parcurgere->next;
}
}
int getFront() {
if (front != NULL)
return front->valoare;
return 0;
}
int getBack() {
if (back != NULL)
return back->valoare;
return 0;
}
int getSize() {return this->size;}
};
Deque de;
int a[5000030];
int 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;
}