44 namespace Gecode {
namespace Int {
namespace GCC {
85 rv[
i].minb=rv[
i].maxb=rv[
i].le=rv[
i].gr=rv[
i].eq=0;
87 for (
int i = n;
i--; ) {
110 for (
int i = 1;
i < m;
i++) {
112 c_min += rv[
i - 1].
maxb;
117 for (
int i = m-1;
i--; ) {
119 c_max += rv[
i + 1].
minb;
122 for (
int i = m;
i--; ) {
123 int reachable = x.
size() - rv[
i].
le - rv[
i].
gr;
129 if ((rv[
i].eq > k[
i].
max()) || (k[
i].
max() > reachable))
146 for (
int i = k.
size();
i--; ) {
151 return (smin <= x.
size()) && (x.
size() <= smax);
190 return x[
i].max() <
x[j].max();
213 return x[
i].min() <
x[j].min();
230 return x.card() < y.card();
263 int sumup(
int from,
int to)
const;
313 for (i = 1; i < elements.
size(); i++) {
314 if (elements[i].
card() != elements[i-1].card() + 1)
315 holes += elements[i].
card()-elements[i-1].card()-1;
327 int first = elements[0].card();
329 firstValue = first - 3;
330 lastValue = first + elements.
size() + holes + 1;
339 int prevCard = elements[0].card()-1;
341 for (j = 2; j < elements.
size() + holes + 2; j++) {
342 if (elements[i].
card() != prevCard + 1) {
345 sum[j + 1] =
sum[j] + elements[
i].max();
348 sum[j + 1] =
sum[j] + elements[
i].min();
354 sum[j + 2] =
sum[j + 1] + 1;
357 i = elements.
size() + holes + 3;
360 while(
sum[i] ==
sum[i - 1]) {
383 return sum[to - firstValue] -
sum[from - firstValue - 1];
385 assert(to - firstValue - 1 >= 0);
386 assert(to - firstValue - 1 <
size);
387 assert(from - firstValue >= 0);
388 assert(from - firstValue <
size);
389 return sum[to - firstValue - 1] -
sum[from - firstValue];
396 return firstValue + 3;
401 return lastValue - 2;
410 return (ds[value] < value ? value : ds[value]) + firstValue;
417 return (ds[value] > value ? ds[ds[value]] : value) + firstValue;
424 for (
int i = 3;
i <
size - 2;
i++) {
426 if (k[j].
card() ==
i+firstValue)
438 for (
int i = 3;
i <
size - 2;
i++) {
440 if (k[j].
card() ==
i+firstValue)
513 for (l=start; (k=
l) != end; hall[k].
ps=to) {
521 for (l=start; (k=
l) != end; hall[k].
s=to) {
529 for (l=start; (k=
l) != end; hall[k].
t=to) {
537 for (l=start; (k=
l) != end; hall[k].
h=to) {
554 while (hall[i].h < i)
561 while (hall[i].
t < i)
577 while (hall[i].h > i)
584 while (hall[i].
t > i) {
592 while (hall[i].s > i)
599 while (hall[i].ps > i)