leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE |
1146.cpp (869B)
0 class SnapshotArray {
1 vector<vector<pair<int, int>>> diffs;
2 int id = 0;
4 public:
5 SnapshotArray(int length) : diffs(length, {{0, 0}}), id() {}
6 int snap() { return id++; }
8 void set(int index, int val) {
9 if (diffs[index].back().first != id)
10 diffs[index].push_back({id, val});
11 else
12 diffs[index].back().second = val;
13 }
15 int get(int index, int snap_id) {
16 const vector<pair<int, int>> &vec = diffs[index];
17 int low = 0, high = vec.size() - 1;
18 while (low <= high) {
19 int mid = low + (high - low) / 2;
20 if (vec[mid].first == snap_id)
21 return vec[mid].second;
22 else if (vec[mid].first < snap_id)
23 low = mid + 1;
24 else
25 high = mid - 1;
26 }
27 return diffs[index][high].second;
28 }
29 };