public class BoundedBag { private int[] element; private int[] counter; private int number = 0; private int sum = 0; public BoundedBag(int n) { element = new int[n]; counter = new int[n]; number = 0; sum = 0; } public int size() { return element.length; } public int elements() { return number; } public int instances() { return sum; } public void add(int e, int n) { if (n == 0) return; sum += n ; int i = find(e); if (i != -1) { counter[i] += n; return; } element[number] = e; counter[number] = n; number++; } public void remove(int e, int n) { int i = find(e); if (i == -1) return; if (counter[i] > n) { counter[i] -= n; sum -= n; return; } number--; sum -= counter[i]; element[i] = element[number]; counter[i] = counter[number]; } private int find(int e) { for (int i=0; i