template struct persistentArray { int time; vector> data; vector> mods; persistentArray(int n, T value = {}) : time(0), data(n, {time, value}) {} T get(int p, int t) { return data[p].get(t); } int set(int p, T value) { mods.push_back({p, data[p].set(value)}); return mods.back().second; } void reset(int t) { while (!mods.empty() && mods.back().second > t) { data[mods.back().first].data.pop_back(); mods.pop_back(); } time = t; } };