Pagini recente » Cod sursa (job #1536816) | Cod sursa (job #1317802) | Cod sursa (job #2061064) | Cod sursa (job #914148) | Cod sursa (job #2731630)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("deque.in");
ofstream fout ("deque.out");
class Deque{
public:
int *vect;
int first;
int last;
int size;
Deque();
void add_last(int);
void delete_last();
void delete_first();
};
Deque::Deque()
{
vect = new int[1];
last = -1;
first = 0;
size = 0;
}
void Deque::add_last(int x)
{
size++;
int *vectAux = new int[size];
int k = -1;
for (int i = first; i <= last; i++)
{
k++;
vectAux[k] = vect[i];
}
delete []vect;
vect = vectAux;
first = 0;
last++;
vect[last] = x;
}
void Deque::delete_first()
{
if (!size)
return;
if(last > first)
first++;
else
{
first = 0;
last = -1;
}
size--;
}
void Deque::delete_last()
{
if (!size)
return;
if(last > first)
last--;
else
{
first = 0;
last = -1;
}
size--;
}
int main()
{
Deque sir;
Deque poz;
int n,k;
fin >> n >> k;
long long int suma = 0;
int v[n];
for(int i = 0 ; i < n; i++)
fin >> v[i];
for (int i = 1; i <= n; i++)
{
while (sir.size && v[i-1] <= sir.vect[sir.last])
{
sir.delete_last();
poz.delete_last();
}
sir.add_last(v[i-1]);
poz.add_last(i);
if (poz.vect[sir.first] == (i - k))
{
sir.delete_first();
poz.delete_first();
}
if (i >= k)
suma += sir.vect[sir.first];
}
fout << suma;
return 0;
}