class SnapshotArray { int sid = 0; //to store changes of values against every index //it will be stored like snap_id -> last value changed HashMap<Integer,Integer>[] map; public SnapshotArray(int length) { map = new HashMap[length]; for(int i =0 ;i < length ; i++) map[i] = new HashMap<>(); } public void set(int index, int val) { map[index].put(sid,val); } public int snap() { sid++; return sid-1; } public int get(int index, int snap_id) { //going to last changed value from the map[index] while(snap_id >= 0 && map[index].containsKey(snap_id) == false) snap_id--; if(snap_id == -1) //if no value exists that number is never updated return 0 ; return map[index].get(snap_id); } } /** * Your SnapshotArray object will be instantiated and called as such: * SnapshotArray obj = new SnapshotArray(length); * obj.set(index,val); * int param_2 = obj.snap(); * int param_3 = obj.get(index,snap_id); */