Warning: session_start(): open(/var/lib/php/sessions/sess_hqe0v0ddb8peu9b1hcm9n0ejng, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
sclass LineComp_LinkedList {
sclass Node {
int value;
Node prev, next;
}
Node tail;
new MultiSetMap indexByElement;
*() {}
*(L l) {
fOr (int i : l) add(i);
}
void add(int i) {
new Node n;
n.value = i;
n.prev = tail;
if (tail != null) tail.next = n;
tail = n;
indexByElement.put(i, n);
}
void replacePair(int pa, int pb, int replaceWith, LineComp_PairCounts pairCounts) {
Set setA = indexByElement.get(pa);
if (setA != null) for (Node node : cloneList(setA)) {
Node next = node.next;
if (next != null && next.value == pb) {
if (node.prev != null) pairCounts.remove(node.prev.value, pa);
pairCounts.remove(pa, pb);
if (next != null) pairCounts.remove(pb, next.value);
indexByElement.remove(pa, node);
node.value = replaceWith;
indexByElement.add(pa, node);
indexByElement.remove(pb, node.next);
// delete next
if (next.next != null) next.next.prev = node;
node.next = next.next;
if (node.prev != null) pairCounts.add(node.prev.value, replaceWith);
if (node.next != null) pairCounts.add(replaceWith, node.next.value);
}
}
}
L toList() {
new L l;
Node node = tail;
while (node != null) {
l.add(node.value);
node = node.next;
}
ret reverseInPlace(l);
}
}