Help me in solving PRIMEQUERY problem

My issue

Runtime error in query part…

My code

#include<iostream>
#include<bits/stdc++.h>
#define ll long long
#define vi vector<int>
#define vl vector<ll>
#define vpi vector<pair<int,int>>
#define vpl vector<pair<ll,ll>>
#define it(v1) v1.begin(),v1.end()
#define loop(i,n) for(int i=0;i<n;i++)
#define ln cout<<endl;
using namespace std;
const int N=1e5+2;
pair<int,int> seg[4*N];
void build(vi &v,int start,int end,int i)
{
    if(start==end)
    {
        if(v[start]==1){
            seg[i]={1,0};
        }
        else if(v[start]==2){
            seg[i]={0,1};
        }
        return;
        
    }
    int mid = start+(end-start)/2;
    //left
    build(v,start,mid,2*i);
    build(v,mid+1,end,2*i+1);
     // Merge information from children
    seg[i].first = seg[2 * i].first + seg[2 * i + 1].first; // Count of 1's
    seg[i].second = seg[2 * i].second + seg[2 * i + 1].second; // Count of 2's


}
pair<int,int> query(int start,int end,int i,int L,int R)
{
    //outside
    
    if(end<L || start>end) return {0,0};
    //inside...
    if(start>=L && R>=end) return {seg[i].first,seg[i].second};
    //partial
      int mid=start+(end-start)/2;
    pair<int,int> ans1=query(start,mid,i*2,L,R);
    pair<int,int> ans2=query(mid+1,end,i*2+1,L,R);
    return {ans1.first+ans2.first,ans1.second+ans2.second};

}
void solve()
{
    int n;cin>>n;
    vi v(n+1);
    for(int i=1;i<=n;i++) cin>>v[i];
    int q;cin>>q;
    //  reset();
    build(v,1,n,1);
    // for(int i=1;i<=3*n;i++) std::cout<<seg[i].first<<" "<<seg[i].second<<endl;
    while(q--)
    {
        int l,r,k;
        cin>>l>>r;
        pair<int,int> ans=query(1,n,1,l,r);
        cout<<ans.first<<" "<<ans.second<<endl;
        
         
    }

}
int main()
{
   int tc;
   cin>>tc;
   while(tc-->0)
   {
      solve();
     
    }
   return 0;
}
 

Problem Link: Prime Query Practice Coding Problem - CodeChef