max-Query1Problem

I dont know what’s causing the TLE.
Can anyone please help

#include<iostream>
#include<vector>
#include<climits>
typedef long long ll;
#define pb push_back
using namespace std;

ll a[200000];
void buildTree(ll s, ll e,ll *tree,ll index){
if(s==e)
{
tree[index] = a[s];
return;
}
ll mid = (s+e)/2;
//build child trees
buildTree(s,mid,tree,2*index);
buildTree(mid+1,e,tree,2*index+1);
//min of both children
tree[index] = min(tree[2*index],tree[2*index+1]);
return;
}

ll query(ll *tree,ll s,ll e,ll qs,ll qe,ll index,ll k){
//No overlap
if(qe<s || e<qs)
return 0;
// Complete overlap
if(qs<=s && e<=qe)
{
if(tree[index]>=k)
return e-s+1;
}
if(s==e)
{
if(tree[index]>=k)
return e-s+1;
else
return 0;
}
//Partial overlap
ll mid = (s+e)/2;
ll left = query(tree,s,mid,qs,qe,2*index,k);
ll right= query(tree,mid+1,e,qs,qe,2*index+1,k);
return left+right;
}

int main(){
ll n,q;cin>>n;
ll l,r,k;
for(ll i=0;i<n;i++)
cin>>a[i];
cin>>q;
ll tree[4*n+1];
buildTree(0,n-1,tree,1);
for(ll i=0;i<q;i++)
{
cin>>l>>r>>k;
cout<<query(tree,0,n-1,l-1,r-1,1,k)<<endl;
}
}