43 namespace Gecode {
namespace Int {
namespace Cumulative {
59 template<
class TaskView>
63 for (
int i=
tasks.size();
i--; ) {
69 template<
class TaskView>
72 leaf(i).e = tasks[
i].e();
73 leaf(i).env =
static_cast<double>(
c)*tasks[i].est()+tasks[
i].e();
77 template<
class TaskView>
84 template<
class TaskView>
106 template<
class TaskView>
void
109 for (
int i=tasks.
size();
i--; ) {
116 template<
class TaskView>
template<
class Node>
121 template<
class TaskView>
125 leaf(i).e = tasks[
i].e();
126 leaf(i).env =
static_cast<double>(
c)*tasks[i].est()+tasks[
i].e();
127 leaf(i).cenv =
static_cast<double>(
c-ci)*tasks[i].est()+tasks[
i].e();
134 while (!n_leaf(met)) {
135 if (
plus(node[n_right(met)].cenv,e) >
136 static_cast<double>(
c-ci) * tasks[i].lct()) {
139 e += node[n_right(met)].e; met = n_left(met);
151 double a_e = node[met].e;
152 double a_env = node[met].env;
155 while (!n_root(met)) {
157 b_e += node[n_right(n_parent(met))].e;
159 a_env =
std::max(a_env,
plus(node[n_left(n_parent(met))].env,a_e));
160 a_e += node[n_left(n_parent(met))].e;
183 if (l.
le + r.
e > l.
e + r.
le) {
203 template<
class TaskView>
208 for (
int i=
tasks.size();
i--; ) {
219 template<
class TaskView>
224 leaf(i).le = leaf(i).e;
226 leaf(i).lenv = leaf(i).env;
233 template<
class TaskView>
246 template<
class TaskView>
249 return root().resLenv < 0;
252 template<
class TaskView>
255 return root().resLenv;
258 template<
class TaskView>
264 template<
class TaskView>