
Implement a SnapshotArray that supports the following interface:
SnapshotArray(int length) initializes an array-like data structure with the given length. Initially, each element equals 0 .
void set(index, val) sets the element at the given index to be equal to val .
int snap() takes a snapshot of the array and returns the snap_id : the total number of times we called snap() minus 1 .
int get(index, snap_id) returns the value at the given index , at the time we took the snapshot with the given snap_id
1 <= length <= 5 * 10 ^40 <= index < length0 <= val <= 10 ^90 <= snap_id < (the total number of times we call snap() )At most 5 * 10 ^4 calls will be made to set , snap , and get .