Pagini recente »
blitz-matrix1
|
Istoria paginii runda/ojigim/clasament
|
Borderou de evaluare (job #92007)
|
Istoria paginii runda/vs_10_9dec2022/clasament
|
Cod sursă (job #357004)
Cod sursă (job
#357004)
#include <fstream>
#include <vector>
#include <time.h>
#include <stdlib.h>
using namespace std;
struct lalea{
int h;
int day;
};
lalea v[5000000];
int size = 0;
int main()
{
srand(time(NULL));
int n, d, x, i, cd, j, days, st, dr, p;
lalea l;
FILE* in = fopen("lalele.in", "r");
FILE* out = fopen("lalele.out", "w");
fscanf(in, "%d", &n);
days = 0;
while (n > 0) {
fscanf(in, "%d", &d);
fscanf(in, "%d", &x);
cd = d;
if (x > 0) {
while (d > 0) {
l.day = days;
l.h = x;
days++;
d--;
v[size++] = l;
}
} else {
while (d > 0) {
st = 0;
dr = size - 1;
do {
p = st + (rand() % (dr - st + 1));
// p = (st * 3 + dr) / 4;
swap(v[dr], v[p]);
l = v[dr];
p = st;
for (i = st; i < dr; i++) {
if (v[i].h - v[i].day < l.h - l.day) {
swap(v[i], v[p]);
p++;
}
}
v[dr] = v[p];
v[p] = l;
if (p > size / 2) {
dr = p - 1;
} else {
st = p + 1;
}
} while (p != size/2);
x = v[p].h + days - v[p].day;
fprintf(out, "%d\n", x);
size /= 2;
d--;
days++;
}
}
n -= cd;
}
fclose(out);
return 0;
}