interface KEY { boolean less(KEY k); // binary method boolean equals(KEY k); // binary method } interface ITEM { KEY key (); } class myKey implements KEY { private int val; static int M = 1000000; public boolean less (KEY k) { return val < ((myKey) k).val; } public boolean equals (KEY k) { return val == ((myKey) k).val; } void read () { val = In.getInt (); } void rand () { val = (int) (M * Math.random ()); } public String toString () { return val + ""; } } class myItem implements ITEM { private myKey val; private double info; myItem() { val = new myKey (); } public KEY key () { return val; } void read () { val.read (); info = In.getDouble (); } void rand () { val.rand (); info = (double) Math.random (); } public String toString () { return "(" + key () + " " + info + ")"; } } class intkeyItem { private int val; private double info; static int M = 1000000; public int key () { return val; } void read () { val = In.getInt (); info = In.getDouble (); } void rand () { val = (int) (M * Math.random ()); info = (double) Math.random (); } public String toString () { return "(" + key () + " " + info + ")"; } } public class SymbolTableArray { /* SymbolTable (int); void insert (ITEM); ITEM search(KEY); ITEM remove(KEY); ITEM select(int) public String toString(); */ private intkeyItem[] st; SymbolTableArray(int M) { st = new intkeyItem[M]; } int count () { int N = 0; for (int i = 0; i < st.length; i++) { if (st[i] != null) N++; } return N; } void insert(intkeyItem x) { st[x.key()] = x; } void remove (int key) { st[key] = null; } intkeyItem search(int key) { return st[key]; } intkeyItem select (int k) { for (int i = 0; i < st.length; i++) { if (st[i] != null) { if (k == 0) return st[i]; else k = k-1; } } return null; } public String toString () { String s = ""; for (int i = 0; i < st.length; i++) { if (st[i] != null) { s = s + st[i] + "\n"; } } return s; } }