summaryrefslogtreecommitdiff
path: root/datastructures/persistent.cpp
blob: 1704ff2150531c732f07db3147f5b1ae94eedc38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template<typename T>
struct persistent {
	int& time;
	vector<pair<int, T>> data;

	persistent(int& time, T value = {}) 
		: time(time), data(1, {time, value}) {}
	
	T get(int t) {
		return prev(upper_bound(all(data), 
		                        pair<int, T>(t+1, {})))->second;
	}
	
	int set(T value) {
		time+=2;
		data.push_back({time, value});
		return time;
	}
};