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