Pagini recente »
Istoria paginii runda/2017-11-23-test-5-2/clasament
|
Borderou de evaluare (job #637029)
|
Istoria paginii runda/2013-03-08-test-9-10/clasament
|
Borderou de evaluare (job #565501)
|
Cod sursă (job #356998)
Cod sursă (job
#356998)
#include <fstream>
#include <vector>
#include <time.h>
#include <stdlib.h>
using namespace std;
struct lalea{
int h;
int day;
};
vector <lalea> v;
/*
void dump(string pf, int days, ofstream& o) {
o << pf << "-" << days <<": " << v.size() << ": ";
for (int i = 0; i < v.size(); i++) {
o << v[i].day << "/" << v[i].h << "/" << v[i].h + days - v[i].day << " ";
}
o << endl;
}
*/
int main()
{
srand(time(NULL));
int n, d, x, i, cd, j, size, days, st, dr, p;
lalea l;
ifstream in("lalele.in");
ofstream out("lalele.out");
in >> n;
days = 0;
v.reserve(n);
while (n > 0) {
in >> d;
in >> x;
cd = d;
if (x > 0) {
while (d > 0) {
l.day = days;
l.h = x;
days++;
d--;
v.push_back(l);
}
} else {
while (d > 0) {
size = v.size();
st = 0;
dr = size - 1;
do {
p = st + (rand() % (dr - st + 1));
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++;
}
}
swap(v[dr], v[p]);
if (p > size / 2) {
dr = p - 1;
} else {
st = p + 1;
}
} while (p != size/2);
x = v[p].h + days - v[p].day;
out << x << endl;
v.resize(p);
d--;
days++;
}
}
n -= cd;
}
return 0;
}