Question: package comp 2 4 0 2 a 4 ; import java.util.Iterator; import java.util.List; import java.util.ArrayList; import java.util.TreeMap; public class UltraFast implements UltraStack { private ArrayList

package comp2402a4;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
import java.util.TreeMap;
public class UltraFast implements UltraStack {
private ArrayList elements;
private TreeMap valueCounts;
private long[] segmentTree;
private int capacity;
public UltraFast(){
elements = new ArrayList>();
valueCounts = new TreeMap>();
capacity =1;
segmentTree = new long[2];
}
private void resizeSegmentTree(){
if (elements.size()> capacity){
capacity *=2;
long[] newTree = new long[2* capacity];
System.arraycopy(segmentTree,0, newTree, 0, segmentTree.length);
segmentTree = newTree;
}
}
private void updateSegmentTree(int index, long val){
index += capacity;(()/())/( M)ove to leaf level
segmentTree[index]= val;
while (index >1){(()/())/( U)pdate path to root
index ()/()=2;
segmentTree[index]= segmentTree[2*index]+ segmentTree[2*index +1];
}
}
private long querySegmentTree(int left, int right){
long sum =0;
left += capacity;(()/())/( M)ove to leaf level
right += capacity;
while (left = right){
if (left %2==1){(()/())/( L)eft is right child
sum += segmentTree[left];
left++;
}
if (right %2==0){(()/())/( R)ight is left child
sum += segmentTree[right];
right--;
}
left ()/()=2;(()/())/( M)ove up to parent level
right ()/()=2;
}
return sum;
}
@Override
public void push(int x){
elements.add(x);
valueCounts.merge(x,1, Integer::sum);
resizeSegmentTree();
updateSegmentTree(elements.size()-1, x);
}
@Override
public Integer pop(){
if (elements.isEmpty()) return null;
int val = elements.remove(elements.size()-1);
int count = valueCounts.get(val);
if (count ==1){
valueCounts.remove(val);
} else {
valueCounts.put(val, count -1);
}
updateSegmentTree(elements.size(),0);
return val;
}
@Override
public Integer get(int i){
if (i 0|| i >= elements.size()) return null;
return elements.get(i);
}
@Override
public Integer set(int i, int x){
if (i 0|| i >= elements.size()) return null;
int oldVal = elements.get(i);
elements.set(i, x);
valueCounts.merge(oldVal,-1,(a, b)-> a + b ==0? null : a + b);
valueCounts.merge(x,1, Integer::sum);
updateSegmentTree(i, x);
return oldVal;
}
@Override
public void doubleTop(){
if (!elements.isEmpty()){
int val = elements.get(elements.size()-1);
push(val *2);
}
}
@Override
public void swapTop(){
if (elements.size()>1){
int lastIndex = elements.size()-1;
int val1= elements.get(lastIndex);
int val2= elements.get(lastIndex -1);
(()/())/( U)pdate value counts
valueCounts.merge(val1,-1,(a, b)-> a + b ==0? null : a + b);
valueCounts.merge(val2,-1,(a, b)-> a + b ==0? null : a + b);
(()/())/( S)wap elements
elements.set(lastIndex, val2);
elements.set(lastIndex -1, val1);
(()/())/( U)pdate value counts again
valueCounts.merge(val1,1, Integer::sum);
valueCounts.merge(val2,1, Integer::sum);
(()/())/( U)pdate segment tree
updateSegmentTree(lastIndex, val2);
updateSegmentTree(lastIndex -1, val1);
}
}
@Override
public Integer max(){
if (valueCounts.isEmpty()) return null;
return valueCounts.lastKey();
}
@Override
public long ksum(int k){
if (k =0) return 0;
k = Math.min(k, elements.size());
return querySegmentTree(elements.size()- k, elements.size()-1);
}
@Override
public int size(){
return elements.size();
}
@Override
public Iterator iterator(){
return new Iterator>(){
private int currentIndex =0;(()/())/( S)tart from the beginning of the list
@Override
public boolean hasNext(){
return currentIndex elements.size();(()/())/( C)heck if there are more elements
}
@Override
public Integer next(){
if (!hasNext()){
throw new java.util.NoSuchElementException();
}
return elements.get(currentIndex++);(()/())/( R)eturn the current element and move to the next
}
};
}
} this is the code i submitted and this is the error im getting. when im running local tests ksum is working but when in the autogtrader its not for big data sets. help fix please.
package comp 2 4 0 2 a 4 ; import

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!