扫描法,以当前数为gcd进行扩展,找到合法的l和r。

可是这样会TLE,我们考虑如果向左延伸到相同的数,那么代表这个数能扩展的区间已经被标记过,就无需再做了。

code:

const int Maxn = 2e6 + 5;
int n, a[Maxn], ans = 0, anscnt = 0;
set < pair <int, int> > s;

signed main(void) {
//    file("");
    read(n);
    for (int i = 1; i <= n; i++) read(a[i]);

    for (int i = 1, l, r; i <= n; i++) {
        for (l = i; l >= 1; l--) {
            if (i != l && a[i] == a[l]) goto FFF;
            if (a[l] < a[i] || a[l] % a[i]) break;
        }
        for (r = i; r <= n; r++)
            if (a[r] < a[i] || a[r] % a[i]) break;
        if (r - l + 1 == ans) ++anscnt;
        if (r - l + 1 > ans) ans = r - l + 1, anscnt = 1; FFF : ;
    } writeln(anscnt);
//    fwrite(pf, 1, o1 - pf, stdout);
    return 0;
}