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();
74 static_cast<long long int>(
c)*tasks[i].est()+tasks[
i].e();
78 template<
class TaskView>
85 template<
class TaskView>
107 template<
class TaskView>
void
110 for (
int i=tasks.
size();
i--; ) {
117 template<
class TaskView>
template<
class Node>
122 template<
class TaskView>
126 leaf(i).e = tasks[
i].e();
128 static_cast<long long int>(
c)*tasks[i].est()+tasks[
i].e();
130 static_cast<long long int>(
c-ci)*tasks[i].est()+tasks[
i].e();
137 while (!n_leaf(met)) {
138 if (
plus(node[n_right(met)].cenv,e) >
139 static_cast<long long int>(
c-ci) * tasks[i].lct()) {
142 e += node[n_right(met)].e; met = n_left(met);
154 long long int a_e = node[met].e;
155 long long int a_env = node[met].env;
156 long long int b_e = 0;
158 while (!n_root(met)) {
160 b_e += node[n_right(n_parent(met))].e;
162 a_env =
std::max(a_env,
plus(node[n_left(n_parent(met))].env,a_e));
163 a_e += node[n_left(n_parent(met))].e;
168 return plus(a_env,b_e);
187 if (l.
le + r.
e > l.
e + r.
le) {
207 template<
class TaskView>
212 for (
int i=
tasks.size();
i--; ) {
223 template<
class TaskView>
228 leaf(i).le = leaf(i).e;
230 leaf(i).lenv = leaf(i).env;
237 template<
class TaskView>
250 template<
class TaskView>
253 return root().resLenv < 0;
256 template<
class TaskView>
259 return root().resLenv;
262 template<
class TaskView>
268 template<
class TaskView>