CF1834E 题解
学校里口胡的时候什么性质都发现了,但是懒得往下想了,就想了
考虑答案的上界,可以先考虑一个素数什么时候被计入答案,显然是这个数组中出现了这个素数,那么答案的上界就显然是第
这个数并不大,也就是
于是可以先枚举左端点,然后二分每次
考虑由 set 里去重,能够做到
代码:
#include <bits/stdc++.h>
#define int long long
#define For(i, a, b) for (int i = (a); i <= (b); i ++)
#define foR(i, a, b) for (int i = (a); i >= (b); i --)
using namespace std;
int n, mex;
int a[300005];
set <int> s, ans, tmp;
int gcd (int x, int y) {
if (y == 0) return x;
return gcd (y, x % y);
}
int lcm (int x, int y) {return x * y / gcd (x, y);}
void solve () {
s.clear ();
ans.clear ();
cin >> n;
For (i, 1, n) cin >> a[i];
foR (i, n, 1) {
tmp.clear ();
for (int j : s) {
if (lcm (j, a[i]) <= 4256249) tmp.insert (lcm (j, a[i]) );
ans.insert (j);
}
tmp.insert (a[i]);
swap (s, tmp);
}
for (int i : s) ans.insert (i);
int mex = 1;
for (int i : ans)
if (i == mex) ++ mex;
cout << mex;
}
signed main () {
int _ = 1;
cin >> _;
while (_ --) {
solve ();
cout << '\n';
}
return 0;
}