問題は次のとおりです。サイズ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;
}
しかし、私のコードには問題があり、各クエリでマップが空になりません。そのため、同じ数を2回/3回クエリすると、以前に保存された頻度のカウントが追加されます。
これを解決するにはどうすればよいですか?10 ^ 5 のような広範囲のクエリに対しては貧弱なプログラムでしょうか? この問題の効率的な解決策は何ですか?