Pagini recente »
Istoria paginii utilizator/casian
|
Istoria paginii runda/sim_info2/clasament
|
Profil Anca21
|
Clasament vaslui_cls10_09.02
|
Cod sursă (job #357468)
Cod sursă (job
#357468)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
using namespace std;
struct lalea {
int h;
int day;
};
lalea v[5000000];
int main()
{
srand(time(NULL));
FILE*in = fopen("lalele.in", "r");
FILE*out = fopen("lalele.out", "w");
int size, n, x, d, days, p, st, dr, low, i;
lalea l;
days = 0;
size = 0;
fscanf(in, "%d", &n);
while (n > 0) {
fscanf(in, "%d", &d);
fscanf(in, "%d", &x);
if (x > 0) {
while (d > 0) {
l.h = x;
l.day = days;
days++;
d--;
n--;
v[size] = l;
size++;
}
} else {
while (d > 0) {
st = 0;
dr = size-1;
do {
low = st;
p = st + rand() % (dr-st + 1);
l = v[p];
v[p] = v[dr];
v[dr] = l;
for (i = st; i < dr; i++) {
if (v[i].h - v[i].day < v[dr].h - v[dr].day) {
l = v[low];
v[low] = v[i];
v[i] = l;
low++;
}
}
l = v[low];
v[low] = v[dr];
v[dr] = l;
if (low > size / 2) {
dr = low - 1;
} else {
st = low + 1;
}
} while(low != size/2);
d--;
n--;
size /= 2;
x = v[low].h - v[low].day + days;
fprintf(out, "%d\n", x);
days++;
}
}
}
return 0;
}