Design a time-based key-value store that can store multiple values for the same key at different timestamps and retrieve the value as of a given time.
- `set(key, value, timestamp)` stores `value` for `key` at the given `timestamp`.
- `get(key, timestamp)` returns the value that was set with the largest stored timestamp that is `<= timestamp`. If there is no such value, return the empty string `""`.
For each key, the `set` calls are made with strictly increasing timestamps.
Implement the function `timeMap(operations)` where `operations` is a list of `[op, ...args]`: `["set", key, value, timestamp]` and `["get", key, timestamp]`. For `"set"` return `null`; for `"get"` return the resolved value (or `""`). Return the list of results, one per operation (use null for operations that return nothing).
1 <= key, value length <= 100. 1 <= timestamp <= 10^7. For a given key, set timestamps are strictly increasing. At most 20000 operations. get should be faster than linear scan - use binary search.