Pagini recente » Cod sursa (job #3255399) | Cod sursa (job #1352713) | Cod sursa (job #2088511) | Cod sursa (job #3248042) | Cod sursa (job #1423240)
#include <fstream>
using namespace std;
template <typename T>
class deque{
T* buf;
int fr, bk, sz;
public:
const int bufsz;
deque(const int Bufsz):
fr(0),
bk(Bufsz-1),
sz(0),
bufsz(Bufsz){
buf = new T[bufsz]; }
~deque(){
delete[] buf; }
T& front(){
return buf[fr]; }
T& back(){
return buf[bk]; }
void push_back(const T val){
++bk;
if(bk == bufsz){
bk = 0; }
buf[bk] = val;
++sz; }
void push_front(const T val){
--fr;
if(fr == -1){
fr = bufsz-1; }
buf[fr] = val;
++sz; }
void pop_back(){
--bk;
if(bk == -1){
bk = bufsz-1; }
--sz; }
void pop_front(){
++fr;
if(fr == bufsz){
fr = 0; }
--sz; }
bool empty(){
return sz == 0; } };
int main(){
ifstream f("deque.in");
int n, k, val;
f >> n >> k;
deque<int> dq(k), elemente(k);
for(int i = 0; i < k; ++i){
f >> val;
while((!dq.empty()) && (dq.back() >= val)){
dq.pop_back(); }
dq.push_back(val);
elemente.push_back(val); }
int suma = dq.front();
for(int i = k; i < n; ++i){
if((!dq.empty()) && dq.front() == elemente.front()){
dq.pop_front(); }
elemente.pop_front();
f >> val;
elemente.push_back(val);
while((!dq.empty()) && (dq.back() > val)){
dq.pop_back(); }
dq.push_back(val);
suma += dq.front(); }
ofstream g("deque.out");
g << suma;
return 0; }