
Solution


class TimeMap {
Map<String, ArrayList<Pair<Integer, String>>> map;
public TimeMap() {
map = new HashMap<String, ArrayList<Pair<Integer, String>>>();
}
public void set(String key, String value, int timestamp) {
if (!map.containsKey(key)) {
map.put(key, new ArrayList<Pair<Integer, String>>());
}
map.get(key).add(new Pair(timestamp, value));
}
public String get(String key, int timestamp) {
if (!map.containsKey(key)) {
return "";
}
int left = 0, right = map.get(key).size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (map.get(key).get(mid).getKey() <= timestamp) {
left = mid + 1;
} else {
right = mid - 1;
}
}
if (right == -1) {
return "";
} else {
return map.get(key).get(right).getValue();
}
}
}