Pagini recente » Cod sursa (job #449856) | Cod sursa (job #2368091) | Cod sursa (job #834769) | Cod sursa (job #1321289) | Cod sursa (job #971873)
Cod sursa(job #971873)
#include<stdio.h>
#include<stdlib.h>
class Deque{
public:
int head, tail, NMAX, size;
int *dequeArray;
Deque(int max){
NMAX = max;
dequeArray = new int[max];
head = tail = 0;
size = 0;
}
~Deque(){}
void enqueue(int x){
if(isFull())
fprintf(stderr, "Queue is full!\n");
else{
dequeArray[tail] = x;
tail = (tail + 1) % NMAX;
size++;
}
}
void dequeue(){
if(isEmpty())
fprintf(stderr, "Queue is empty!\n");
else{
head = (head + 1) % NMAX;
size--;
}
}
int front(){
if(isEmpty()){
fprintf(stderr, "Queue is empty!\n");
int x;
return x;
}
return dequeArray[head];
}
int isEmpty(){
if(size == 0)
return 1;
return 0;
}
int isFull(){
if(size == NMAX)
return 1;
return 0;
}
int findMin(){
int i, min = 100000000;
for(i=0; i<=NMAX-1; i++)
if(dequeArray[i] < min)
min = dequeArray[i];
return min;
}
};
int main(){
int i, K, N, min, x;
long long S = 0;
FILE *pf, *pg;
pf = fopen("deque.in", "r");
pg = fopen("deque.out", "w");
fscanf(pf, "%d %d", &N, &K);
class Deque D(K);
min = 100000000;
for(i=1; i<=K; i++){
fscanf(pf, "%d", &x);
if(x < min)
min = x;
D.enqueue(x);
}
S = S + min;
for(i = 1; i <= N - K; i++){
fscanf(pf, "%d", &x);
if(D.front() != min){
D.dequeue();
D.enqueue(x);
if(x < min)
min = x;
S = S + min;
}
else{
D.dequeue();
D.enqueue(x);
min = D.findMin();
S = S + min;
}
}
fprintf(pg, "%lld\n", S);
fclose(pf);
fclose(pg);
return 0;
}