This commit is contained in:
kkunkka
2025-05-14 11:57:42 +08:00
parent c99ffd4ae4
commit 96f22c1acc
4 changed files with 74 additions and 4 deletions

4
.idea/misc.xml generated
View File

@@ -8,7 +8,5 @@
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="graalvm-21" project-jdk-type="JavaSDK" />
</project>

2
.idea/vcs.xml generated
View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@@ -0,0 +1,29 @@
package com.dota.binarySearch._1146;
import java.util.TreeMap;
class SnapshotArray {
int cnt = 0;
TreeMap<Integer, Integer>[] arr ;
int n;
public SnapshotArray(int length) {
arr = new TreeMap[length];
n = length;
for (int i = 0; i < n; i++) {
arr[i] = new TreeMap<>();
arr[i].put(0, 0);
}
}
public void set(int index, int val) {
arr[index].put(cnt, val);
}
public int snap() {
return cnt++;
}
public int get(int index, int snap_id) {
return arr[index].floorEntry(snap_id).getValue();
}
}

View File

@@ -0,0 +1,43 @@
package com.dota.binarySearch._981;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class TimeMap {
Map<String, List<String>> vmap;
Map<String, List<Integer>> imap;
public TimeMap() {
vmap = new HashMap<>();
imap = new HashMap<>();
}
public void set(String key, String value, int timestamp) {
vmap.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
imap.computeIfAbsent(key, k -> new ArrayList<>()).add(timestamp);
}
public String get(String key, int timestamp) {
var vList = vmap.get(key);
var iList = imap.get(key);
if (vList == null || iList == null) return "";
int l= 0, r = iList.size()-1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (iList.get(mid)==timestamp) {
return vList.get(mid);
}
if (iList.get(mid)>timestamp) {
r = mid - 1;
} else {
l = mid + 1;
}
}
if (r < 0) {
return "";
}
return vList.get(r);
}
}