Pagini recente » Cod sursa (job #1445426) | Cod sursa (job #866647) | Cod sursa (job #1206047) | Cod sursa (job #2978407) | Cod sursa (job #2889464)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
class deq{
int v[5000001], i, f;
public:
deq();
void push_back(int);
void pop_back();
void pop_front();
int front();
int back();
int size();
};
deq::deq()
{
i = -1;
f = -1;
}
int deq::size()
{
if(i==-1&&f==-1)
return 0;
else return f-i+1;
}
int deq::front()
{
return v[i];
}
int deq::back()
{
return v[f];
}
void deq::push_back(int x)
{
if(i==-1)
{
i++;
f++;
}
else
{
f++;
}
v[f] = x;
}
void deq::pop_back()
{
if(i==f)
{
i=-1;
f=-1;
}
else
f--;
}
void deq::pop_front()
{
if(i==f)
{
i=-1;
f=-1;
}
else i++;
}
int main()
{
deq coada, coada_pozitii;
int n, k, i, j, suma=0, x;
f>>n>>k;
for(i=0;i<n;i++)
{
f>>x;
if(coada.size()==0)
{
coada.push_back(x);
coada_pozitii.push_back(i);
}
else
{
if(coada_pozitii.front()<=i-k)
{
suma += coada.front();
coada_pozitii.pop_front();
coada.pop_front();
}
else if(i>k)
{
suma+=coada.front();
}
while(coada.back()>=x && coada.size())
{
coada.pop_back();
coada_pozitii.pop_back();
}
coada.push_back(x);
coada_pozitii.push_back(i);
}
}
if(coada_pozitii.front()<=i-k)
{
suma += coada.front();
coada_pozitii.pop_front();
coada.pop_front();
}
else if(i>k)
{
suma+=coada.front();
}
g<<suma;
}