问题是:给定一个大小为N的数组。还给定q =查询数;在查询中,您将得到l = 下限,u = 上限和num = 您必须将频率计入 l~u 的数量。
我在 C++ 中实现了我的代码,如下所示:
#include <iostream>
#include <map>
using namespace std;
map<int,int>m;
void mapnumbers(int arr[], int l, int u)
{
for(int i=l; i<u; i++)
{
int num=arr[i];
m[num]++;
}
}
int main()
{
int n; //Size of array
cin>>n;
int arr[n];
for(int i=0; i<n; i++)
cin>>arr[i];
int q; //Number of queries
cin>>q;
while(q--)
{
int l,u,num; //l=lower range, u=upper range, num=the number of which we will count frequency
cin>>l>>u>>num;
mapnumbers(arr,l,u);
cout<<m[num]<<endl;
}
return 0;
}
但是我的代码有一个问题,在每个查询中它不会使地图m为空。这就是为什么如果我两次/三次查询相同的数字,它会将频率计数与前一个存储的计数相加。
我该如何解决这个问题?对于 10^5 的大范围查询,它会是一个糟糕的程序吗?这个问题的有效解决方案是什么?