1class Solution {2public:3vector<int> cumW;4Solution(vector<int> &w) {5// initialising random seeder6srand(time(NULL));7// populating the cumulative weights vector8cumW.resize(w.size());9cumW[0] = w[0];10for (int i = 1; i < w.size(); i++) cumW[i] = cumW[i - 1] + w[i];11}1213int pickIndex() {14return upper_bound(begin(cumW), end(cumW), rand() % cumW.back()) - begin(cumW);15}16};