You are on page 1of 2

#include<bits/stdc++.

h>
using namespace std;
#define lli long long int
lli a[100001];

bitset<5001> tree1[400005];

void build(lli node,lli start,lli end)


{
if(start>end)
return;
if(start==end)
{
tree1[node].set(a[start]);
}
else
{
lli mid=(start+end)>>1;
build(2*node,start,mid);
build(2*node+1,mid+1,end);

tree1[node]=tree1[2*node] | tree1[2*node+1];
}

bitset<5001>query(lli node,lli start,lli end,lli l,lli r)


{
if(start>r || start>end || end<l)
return 0;
if(start>=l && end<=r)
{

return tree1[node];
}

lli mid=(start+end)>>1;

return(query(2*node,start,mid,l,r) | query(2*node+1,mid+1,end,l,r));

}
int main()
{
std::ios_base::sync_with_stdio(false);
cin.tie(0);

lli n,l,r,q;
cin>>n;
for(lli i=1;i<=n;i++)cin>>a[i];

build(1,1,n);
cin>>q;
while(q--)
{
cin>>l>>r;
cout<<query(1,1,n,l,r).count()<<"\n";
}
return 0;

You might also like