➤ Problem Link : FREQ2
👉 Hint : edit please
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
int blk_size;
struct query
{
int lt,rt,ind;
};
bool comp(query x,query y)
{
if(x.lt/blk_size != y.lt/blk_size)
return x.lt/blk_size < y.lt/blk_size;
return x.rt < y.rt;
}
int main()
{
int n,q,l,r,mol,mor;
scanf("%d %d",&n,&q);
blk_size=sqrt(n);
int arr[n],cnt[100001]={0},freq[100001]={0};
query qarr[q];
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
int ans[q];
for(int i=0;i<q;i++)
{
scanf("%d %d",&l,&r);
qarr[i].lt=l;
qarr[i].rt=r;
qarr[i].ind=i;
}
sort(qarr,qarr+q,comp);
mol=0;
mor=-1;
int curr_l;
int curr_r;
int qans=0;
int mf=-1;
for(int i=0;i<q;i++)
{
curr_l=qarr[i].lt;
curr_r=qarr[i].rt;
while(mor<curr_r)
{
mor++;
freq[cnt[arr[mor]]]--;
cnt[arr[mor]]++;
freq[cnt[arr[mor]]]++;
if(cnt[arr[mor]]>qans)
qans=cnt[arr[mor]];
}
while(mor>curr_r)
{
if(cnt[arr[mor]]==qans)
{
if(freq[cnt[arr[mor]]]==1)
qans=cnt[arr[mor]]-1;
}
freq[cnt[arr[mor]]]--;
cnt[arr[mor]]--;
freq[cnt[arr[mor]]]++;
mor--;
}
while(mol>curr_l)
{
mol--;
freq[cnt[arr[mol]]]--;
cnt[arr[mol]]++;
freq[cnt[arr[mol]]]++;
if(cnt[arr[mol]]>qans)
qans=cnt[arr[mol]];
}
while(mol<curr_l)
{
if(cnt[arr[mol]]==qans)
{
if(freq[cnt[arr[mol]]]==1)
qans=cnt[arr[mol]]-1;
}
freq[cnt[arr[mol]]]--;
cnt[arr[mol]]--;
freq[cnt[arr[mol]]]++;
mol++;
}
ans[qarr[i].ind]=qans;
}
for(int i=0;i<q;i++)
printf("%d\n",ans[i]);
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
