提交时间:2026-06-06 15:31:28
运行 ID: 41980
#include<bits/stdc++.h> using namespace std; int n,a[100005],__,st[19][100005],ji[1300005]; struct sss{ int x,i,yi; bool operator<(const sss a)const{ return a.x<x; } }; inline int ch(int l,int r){ int md=__lg(r-l+1); if(st[md][l]*st[md][r-(1<<md)+1]/__gcd(st[md][l],st[md][r-(1<<md)+1])<1e9+7 && st[md][l]>=0 && st[md][r-(1<<md)+1]>=0)return st[md][l]/__gcd(st[md][l],st[md][r-(1<<md)+1])*st[md][r-(1<<md)+1]; return -1; } queue<sss>q; int main(){ scanf("%d",&__); while(__--){ scanf("%d",&n); while(!q.empty())q.pop(); memset(ji,0,sizeof(ji)); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); if(a[i]<=1300000)q.push((sss){a[i],i,i}),ji[a[i]]=1; st[0][i]=a[i]; for(int j=1;j<=16;j++)st[j][i]=-1; } for(int i=1;i<=16;i++){ for(int j=1;j<=n;j++){ if(j+(1<<i)-1<=n && st[i-1][j]*st[i-1][j+(1<<(i-1))]/__gcd(st[i-1][j],st[i-1][j+(1<<(i-1))])<1300000+7 && st[i-1][j]>0 && st[i-1][j+(1<<(i-1))]>0)st[i][j]=st[i-1][j]/__gcd(st[i-1][j],st[i-1][j+(1<<(i-1))])*st[i-1][j+(1<<(i-1))]; if(st[i][j]<0 || st[i][j]>1e9+7)st[i][j]=-1; } } int last=0; while(!q.empty()){ sss now=q.front(); q.pop(); if(now.x>last+1)break; ji[now.x]=1; int l=now.yi+1,r=n; sss ans=((sss){-1,-1,-1}); while(l<=r){ int mid=(l+r)>>1; if(ch(now.i,mid)>1e9+7 || ch(now.i,mid)<0){ r=mid-1; } else if(ch(now.i,mid)!=now.x){ ans=((sss){ch(now.i,mid),now.i,mid}); r=mid-1; } else l=mid+1; } if(ans.i!=-1){ if(ans.x<=1300000)q.push(ans); } } for(int i=1;i<=1300000;i++){ if(ji[i]==0){ printf("%d\n",i); break; } } //printf("%d\n",last+1); } }