count insead of find. binary search.
#include <iostream>
#include <map>
using namespace std;
map<int, int> blist;
void count_dup(int* arr, int start, int end)
{
if(end == start)
{
blist[arr[start]] +=1;
return;
}
if(start<end)
{
if(arr[start] == arr[end])
{
blist[arr[end]] += end - start + 1;
return;
}
int mid = start + (end-start)/2;
count_dup(arr, start, mid);
count_dup(arr, mid+1, end);
}
}
int main()
{
int A[] = {1,2,2,3,3,3,4,4,4,5,5,5,5,6,6,6,6,7,7,8,9};
count_dup(A, 0,20);
map<int, int>::iterator iter = blist.begin();
while(iter != blist.end())
{
cout << iter->first << ": " << iter->second << endl;
iter++;
}
return 0;
}