Coding Challenge Solution – Good Range

This my solution to this Good Range Coding Challenge

There is a number space given from 1 to N. And there are M queries followed by that. In each query, we were given a number between 1 to N (both inclusive). We add these number one by one into a set.

Good range: A range in which there is exactly one element present from the set.

For each query, we need to find the good ranges. We need to return the sum of boundry of all good ranges.

Input:

First line will take two integer for input N and M. Then following m lines would be numbers between 1 and N (both inclusive).

Output:

Following M lines contains sum of boudaries of good ranges.

Note:

Range can consist of single element and represented as (x-x) where boundary sum will be x+x.

Example:

Input:

10 4  2  5  7  9  

Output:

11  18  30  46  

Explaination:

step-1) set: 2  good range: (1-10)  sum: 1+10=11   step-2) set: 2 5  good range: (1-4), (3-10)  sum: 1+4+3+10=18   step-3) set: 2 5 7  good range: (1-4), (3-6), (6-10)  sum: 1+4+3+6+6+10=30   step-4) set: 2 5 7 9  good range: (1-4), (3-6), (6-8), (8-10)  sum: 1+4+3+6+6+8+8+10=46 
#include <iostream> #include <set> using namespace std;  class Solution {     public:      Solution(const unsigned int _N, const unsigned int _M) : N(_N), M(_M) {}       void solve()     {         for(unsigned int i=0; i<M; ++i)         {             unsigned int v;              cin >> v;              cout << "New Element = " << v << endl;              q.insert(v);              print_res();              cout << endl;          }     }      void print_res()     {                unsigned int left=1;         auto it=q.begin();          unsigned int last = *it;           for(++it; it!=q.end(); ++it)         {             const unsigned int curr = *it;              const unsigned int right = curr-1;              cout << "[" << left << ", "<< right << "] contains " << last << " and sum = " << (left+right) << endl;              left = last+1;              last = curr;          }         const unsigned right = N;          cout << "[" << left << ", "<< right << "] contains " << last << " and sum = " << (left+right) << endl;      }      private:      unsigned int N;      unsigned int M;      set<unsigned int> q;  };    int main() {     // your code goes here     unsigned int N=0;      unsigned int M=0;      cin >> N >> M;      Solution sol(N,M);      sol.solve();      return 0; }  

Note: I am aware I’m returning more information than required by the problem description but I have chosen to do it to include also debugging information