My code for the codechef SUBLCM problem is giving a bad alloc error

The below code gives a bad alloc error and I can’t figure out why, could someone please help;

#include <bits/stdc++.h>
#define ll          long long
#define pb          push_back
#define pii         pair<int,int>
#define vi          vector<int>
#define vii         vector<pii>
#define mi          map<int,int>
#define mii         map<pii,int>
#define endl        '\n'
#define hell        1000000007
#define rep(i,a,b)  for(int i=a;i<b;i++)
#define repr(i,a,b) for(int i=a;i>=b;i--)
#define int long long
#define sz(x) (int)x.size()
#define mp make_pair
#define fi first
#define se second
#define io ios_base::sync_with_stdio(false),cin.tie(NULL)
using namespace std;
#define INF 1e7
#define MAX 1000005
int spf[MAX];
int f[MAX];
// function to find smallest prime factor 
void sieve()
{
   spf[1] = 1;
   for(int i=2;i<MAX;i++)
   {
       spf[i] = i;
   }
   for(int j=4;j<MAX;j+=2)
       spf[j]=2;
   for(int i=3;i*i<MAX;i++)
   {
       if(spf[i]==i)
       {
           for(int j=i*i;j<MAX;j+=i)
               if(spf[j]==j)
                   spf[j]=i;
       }
   }
}

int res(vi& a,int n,vi v[])
{
   memset(f,-1,sizeof(f));
   rep(i,0,n)
   {
       while(a[i]>1)
       {
           int val = spf[a[i]];
           a[i] = a[i]/val;
           v[i].pb(val); // stores all the prime factor of a number in the vector
       }
   }
   int l=0,r=1,ans =-1; // using two pointers to include and exclude elements 
   for(auto it:v[0])
   {
       f[it]=0;
   }
   while(l<=r&&r<n)
   {
       int flag=0;
       rep(i,0,v[r].size())
       {
           if(f[v[r][i]]==-1||f[v[r][i]]==r)
           {
               f[v[r][i]]=r;
           }
           else
           {
               flag=1;
               break;
           }
       }
       if(flag==1)
       {
           for(auto it:v[l])
           {
               f[it]=-1;
           }
           l++;
       }
       else
       {
           ans = max(ans,r-l+1);
           r++;
       }
   }
   if(ans==1) ans = -1;
   return ans;
}
signed main()
{
   io;
   sieve();
   int t;
   cin >>t;
   while(t--)
   {
   int n;
   cin >> n;
   vi a(n);
   rep(i,0,n)
   {
       cin >> a[i];
   }
   vi v[n];
   cout << res(a,n,v)<<endl;
   }
}