#include <vector> #include <algorithm> using namespace std; class Over9000Rocks { public: int countPossibilities(vector<int> lowerBound, vector<int> upperBound) { vector<pair<int, int>> segs; int n = lowerBound.size(); for (int s = 1; s < (1 << n); ++s) { int mn = 0, mx = 0; for (int i = 0; i < n; ++i) { if (s & (1 << i)) { mn += lowerBound[i]; mx += upperBound[i]; } } segs.emplace_back(mn, mx); } sort(segs.begin(), segs.end()); int prv = 9000, ans = 0; for (const auto& seg : segs) { if (prv < seg.first) { ans += seg.second - seg.first + 1; prv = seg.second; } else if (prv < seg.second) { ans += seg.second - prv; prv = seg.second; } } return ans; } };