#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// Max heap for lower half
int maxHeap[1000];
int maxSize = 0;

// Min heap for upper half
int minHeap[1000];
int minSize = 0;

// Function to add to max heap
void addMaxHeap(int num) {
    maxHeap[maxSize++] = num;
    for (int i = maxSize - 1; i > 0 && maxHeap[i] > maxHeap[(i-1)/2]; i = (i-1)/2) {
        int temp = maxHeap[i];
        maxHeap[i] = maxHeap[(i-1)/2];
        maxHeap[(i-1)/2] = temp;
    }
}

// Function to add to min heap
void addMinHeap(int num) {
    minHeap[minSize++] = num;
    for (int i = minSize - 1; i > 0 && minHeap[i] < minHeap[(i-1)/2]; i = (i-1)/2) {
        int temp = minHeap[i];
        minHeap[i] = minHeap[(i-1)/2];
        minHeap[(i-1)/2] = temp;
    }
}

// Get top of max heap
int getMaxTop() {
    return maxHeap[0];
}

// Get top of min heap
int getMinTop() {
    return minHeap[0];
}

// Pop from max heap
void popMaxHeap() {
    maxHeap[0] = maxHeap[--maxSize];
    int i = 0;
    while (2*i+1 < maxSize) {
        int maxChild = 2*i+1;
        if (2*i+2 < maxSize && maxHeap[2*i+2] > maxHeap[maxChild]) maxChild = 2*i+2;
        if (maxHeap[i] >= maxHeap[maxChild]) break;
        int temp = maxHeap[i];
        maxHeap[i] = maxHeap[maxChild];
        maxHeap[maxChild] = temp;
        i = maxChild;
    }
}

// Pop from min heap
void popMinHeap() {
    minHeap[0] = minHeap[--minSize];
    int i = 0;
    while (2*i+1 < minSize) {
        int minChild = 2*i+1;
        if (2*i+2 < minSize && minHeap[2*i+2] < minHeap[minChild]) minChild = 2*i+2;
        if (minHeap[i] <= minHeap[minChild]) break;
        int temp = minHeap[i];
        minHeap[i] = minHeap[minChild];
        minHeap[minChild] = temp;
        i = minChild;
    }
}

// Add number and balance heaps
void addNumber(int num) {
    if (maxSize == 0 || num < getMaxTop()) {
        addMaxHeap(num);
    } else {
        addMinHeap(num);
    }
    // Balance heaps
    if (maxSize > minSize + 1) {
        addMinHeap(getMaxTop());
        popMaxHeap();
    } else if (minSize > maxSize) {
        addMaxHeap(getMinTop());
        popMinHeap();
    }
}

// Get median
double getMedian() {
    if (maxSize > minSize) {
        return (double)getMaxTop();
    } else {
        return (getMaxTop() + getMinTop()) / 2.0;
    }
}

int main() {
    int N;
    scanf("%d", &N);
    for (int i = 0; i < N; i++) {
        char input[20];
        scanf("%s", input);
        int num;
        if (sscanf(input, "%d", &num) == 1) {
            addNumber(num);
            printf("%.1f\n", getMedian());
        } else {
            printf("Invalid input\n");
        }
    }
    return 0;
}