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 compa;
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 ;
segmentTree new long;
private void resizeSegmentTree
if elementssize capacity
capacity ;
long newTree new long capacity;
System.arraycopysegmentTree newTree, segmentTree.length;
segmentTree newTree;
private void updateSegmentTreeint index, long val
index capacity; Move to leaf level
segmentTreeindex val;
while index Update path to root
index ;
segmentTreeindex segmentTreeindex segmentTreeindex ;
private long querySegmentTreeint left, int right
long sum ;
left capacity; Move to leaf level
right capacity;
while left right
if left Left is right child
sum segmentTreeleft;
left;
if right Right is left child
sum segmentTreeright;
right;
left ; Move up to parent level
right ;
return sum;
@Override
public void pushint x
elements.addx;
valueCounts.mergex Integer::sum;
resizeSegmentTree;
updateSegmentTreeelementssize x;
@Override
public Integer pop
if elementsisEmpty return null;
int val elements.removeelementssize;
int count valueCounts.getval;
if count
valueCounts.removeval;
else
valueCounts.putval count ;
updateSegmentTreeelementssize;
return val;
@Override
public Integer getint i
if i i elements.size return null;
return elements.geti;
@Override
public Integer setint i int x
if i i elements.size return null;
int oldVal elements.geti;
elements.seti x;
valueCounts.mergeoldVala b a b null : a b;
valueCounts.mergex Integer::sum;
updateSegmentTreei x;
return oldVal;
@Override
public void doubleTop
if elements.isEmpty
int val elements.getelementssize;
pushval ;
@Override
public void swapTop
if elementssize
int lastIndex elements.size;
int val elements.getlastIndex;
int val elements.getlastIndex ;
Update value counts
valueCounts.mergevala b a b null : a b;
valueCounts.mergevala b a b null : a b;
Swap elements
elements.setlastIndex val;
elements.setlastIndex val;
Update value counts again
valueCounts.mergeval Integer::sum;
valueCounts.mergeval Integer::sum;
Update segment tree
updateSegmentTreelastIndex val;
updateSegmentTreelastIndex val;
@Override
public Integer max
if valueCountsisEmpty return null;
return valueCounts.lastKey;
@Override
public long ksumint k
if k return ;
k Math.mink elements.size;
return querySegmentTreeelementssize k elements.size;
@Override
public int size
return elements.size;
@Override
public Iterator iterator
return new Iterator
private int currentIndex ; Start from the beginning of the list
@Override
public boolean hasNext
return currentIndex elements.size; Check if there are more elements
@Override
public Integer next
if hasNext
throw new java.util.NoSuchElementException;
return elements.getcurrentIndex; Return 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.
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
