Pagini recente » Cod sursa (job #2102591) | Cod sursa (job #678675) | Cod sursa (job #524416) | Cod sursa (job #723398) | Cod sursa (job #2818851)
#include <iostream>
#include <stdio.h>
#include <unordered_map>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <cassert>
using namespace std;
typedef struct deque_t *deque;
struct deque_t {
int32_t value;
deque next;
};
struct Deque {
deque front;
deque back;
int32_t total;
};
struct Deque *init() {
struct Deque *front = (struct Deque *)malloc(sizeof(struct Deque));
memset(front, 0, sizeof(struct Deque));
return front;
}
void pushBack(struct Deque *self, int32_t value) {
deque node = (deque)malloc(sizeof(struct deque_t));
node->next = NULL;
node->value = value;
if(!self->front) {
self->front = node;
}
if(!self->back) {
self->back = node;
}
else {
self->back->next = node;
self->back = node;
}
self->total++;
}
void pushFront(struct Deque *self, int32_t value) {
deque node = (deque)malloc(sizeof(struct deque_t));
node->next = NULL;
node->value = value;
if(!self->back) {
self->back = node;
}
if(!self->front) {
self->front = node;
}
else {
deque last = self->front;
self->front = node;
self->front->next = last;
}
self->total++;
}
void deleteFront(struct Deque *self) {
if(self->front) {
self->front = self->front->next;
self->total--;
}
}
void show(struct Deque *self) {
deque front = self->front;
while(front != NULL) {
cout << front->value << "\n";
front = front->next;
}
}
int32_t front(struct Deque *self) {
assert(self->front != NULL);
return self->front->value;
}
int32_t back(struct Deque *self) {
assert(self->back != NULL);
return self->back->value;
}
int main() {
FILE *fd = fopen("deque.in", "r+");
FILE *fr = fopen("deque.out", "w+");
struct Deque *arb = init();
int32_t n, m;
int64_t mex = 0;
fscanf(fd, "%d %d", &n, &m);
for(int32_t i = 0; i < n; i++) {
int32_t a;
fscanf(fd, "%d", &a);
pushBack(arb, a);
if(arb->total > m) {
deleteFront(arb);
}
while(front(arb) > back(arb)) {
deleteFront(arb);
}
if(i >= m - 1) {
mex += (int64_t)front(arb);
}
}
fprintf(fr, "%I64d", mex);
}