/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package amgframework;
import java.util.*;
/**
*
* @author mrupp
*/
class Lambda2
{
int values[];
ArrayList<SortedSet<Integer> > list;
Lambda2(int size)
{
values = new int[size];
list = new ArrayList<SortedSet<Integer> >();
}
void set(int i, int v)
{
values[i] = v;
Set<Integer> s;
if(list.size() <= v)
{
while(list.size() <= v)
list.add(new TreeSet<Integer>());
}
s = list.get(v);
s.add(i);
}
void remove(int i)
{
if(values[i] < 0) return;
list.get(values[i]).remove(i);
values[i] = -1;
}
void unset(int i)
{
values[i] = -1;
}
int remove_max()
{
int i= get_max();
remove(i);
return i;
}
int get_max()
{
for(int i=list.size()-1; i>=0; i--)
{
if(list.get(i).isEmpty()) continue;
return list.get(i).first();
}
return -1;
}
boolean assigned(int i)
{
return values[i] < 0;
}
void increase(int k)
{
int v = values[k];
if(v < 0) return;
remove(k);
set(k, v+1);
}
void decrease(int k)
{
int v = values[k];
if(v <= 0) return;
remove(k);
set(k, v-1);
}
}