Go 85% binary search
go\ntype SnapshotArray struct {\n\tmetadata [][][]int\n\tseq      int\n}\n\nfunc Constructor(length int) SnapshotArray {\n\treturn SnapshotArray{\n\t\tmetadata:
```go\ntype SnapshotArray struct {\n\tmetadata [][][]int\n\tseq      int\n}\n\nfunc Constructor(length int) SnapshotArray {\n\treturn SnapshotArray{\n\t\tmetadata: make([][][]int, length),\n\t\tseq:      0,\n\t}\n}\n\nfunc (sa *SnapshotArray) Set(index int, val int)  {\n\tif len(sa.metadata[index]) == 0 || sa.metadata[index][len(sa.metadata[index]) - 1][0] != sa.seq {\n\t\tsa.metadata[index] = append(sa.metadata[index], []int{sa.seq, val})\n\t\treturn\n\t}\n\tsa.metadata[index][len(sa.metadata[index]) - 1][1] = val\n}\n\nfunc (sa *SnapshotArray) Snap() int {\n\tsa.seq++\n\treturn sa.seq-1\n}\n\nfunc (sa *SnapshotArray) Get(index int, snapID int) int {\n\treturn findLE(sa.metadata[index], snapID)\n}\n\nfunc findLE(data [][]int, snapID int) int {\n\tif len(data) == 0 {\n\t\treturn 0\n\t}\n\tif data[0][0] > snapID {\n\t\treturn 0\n\t}\n\tif data[len(data)-1][0] <= snapID {\n\t\treturn data[len(data)-1][1]\n\t}\n\tl, r := 0, len(data)-1\n\tfor l <= r {\n\t\tm := (l+r)>>1\n\t\tif data[m][0] == snapID {\n\t\t\treturn data[m][1]\n\t\t} else if data[m][0] < snapID {\n\t\t\tl = m + 1\n\t\t} else {\n\t\t\tr = m - 1\n\t\t}\n\t}\n\treturn data[r][1]\n}\n```
['Binary Search', 'Go']