QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#606025#9426. Relearn through ReviewshiftWA 148ms3840kbC++202.9kb2024-10-02 21:41:292024-10-02 21:41:30

Judging History

你现在查看的是最新测评结果

  • [2024-10-02 21:41:30]
  • 评测
  • 测评结果:WA
  • 用时:148ms
  • 内存:3840kb
  • [2024-10-02 21:41:29]
  • 提交

answer

#include <bits/stdc++.h>

using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned;

template<typename T>
struct RMQ {
    int n;
    std::vector<int> BIT;
    std::vector<std::vector<T>> st;

    RMQ() {}
    RMQ(const std::vector<T> &v) {
        init(v);
    }

    void initBIT(int n) {
        BIT.resize(n + 1);
        for(int i = 2; i <= n; i ++ ) {
            BIT[i] = BIT[i / 2] + 1;
        }
    }

    void init(const std::vector<T> &v) {
        n = v.size();

        initBIT(n);

        const int K = BIT[n];
        st.assign(n, std::vector<T>(K + 1));

        for(int i = 0; i < n; i ++ ) {
            st[i][0] = v[i];
        }
        for(int x = 1; x <= K; x ++ ) {
            for(int i = 0; i + (1 << x) - 1 < n; i ++ ) {
                st[i][x] = std::gcd(st[i][x - 1], st[i + (1 << (x - 1))][x - 1]);
            }
        }
    }

    T query(int l, int r) {
        int B = BIT[r - l + 1];
        return std::gcd(st[l][B], st[r - (1 << B) + 1][B]);
    }

};

void solve() {
    i64 n, k;
    std::cin >> n >> k;

    std::vector<i64> g(n + 2), rg(n + 2), a(n + 2);
    for(int i = 1; i <= n; i ++ ) {
        std::cin >> a[i];
        g[i] = std::gcd(g[i - 1], a[i]);
    }

    for(int i = n; i >= 1; i -- ) {
        rg[i] = std::gcd(rg[i + 1], a[i]);
    }
    for(int i = 1; i <= n; i ++ ) {
        a[i] += k;
    }

    RMQ<i64> rmq(a);

    auto fidr = [&](int p, i64 v) -> int {
        if(a[p] % v) return -1;
        int l = p, r = n;
        while(l < r) {
            int mid = l + r + 1 >> 1;
            if((rmq.query(p, mid) % v) == 0) l = mid;
            else r = mid - 1;
        }
        return l;
    };

    auto fidl = [&](int p, i64 v) -> int {
        if(a[p]% v) return -1;
        int l = 1, r = p;
        while(l < r) {
            int mid = l + r >> 1;
            if(rmq.query(mid, p) % v == 0) r = mid;
            else l = mid + 1;
        }
        return r;
    };

    i64 ans = g[n];
    for(int i = 1; i <= n; i ++ ) {
        if(i == n) continue;
        int p = fidr(i + 1, g[i]);
        if(p != -1) {
            if(p == n) {
                ans = std::max(ans, g[i]);
            } else if((rg[p + 1] % g[i]) == 0) {
                ans = std::max(ans, rg[i]);
            }
        }
    }
    
    for(int i = n; i >= 1; i -- ) {
        if(i == 1) continue;
        int p = fidl(i - 1, rg[i]);
        if(p != -1) {
            if(p == 1) {
                ans = std::max(ans, rg[i]);
            } else if(g[p - 1] % rg[i] == 0) {
                ans = std::max(ans, rg[i]);
            }
        }
    }
    
    ans = std::max(ans, rmq.query(1, n));
    std::cout << ans << '\n';
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    int t = 1;
    std::cin >> t;
    
    while (t--) {
        solve();
    }
    
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3608kb

input:

2
6 2
5 3 13 8 10 555
3 0
3 6 9

output:

5
3

result:

ok 2 lines

Test #2:

score: -100
Wrong Answer
time: 148ms
memory: 3840kb

input:

100000
1 608611451460421713
33155506392034032
1 743116173559300609
6138108577573005
7 364454564010802125
657035115675878115 657035115675878115 657035115675878115 657035115675878115 657035115675878115 292580551665075990 657035115675878115
4 316648374341335221
365788422120542814 182894211060271407 731...

output:

641766957852455745
749254282136873614
657035115675878115
182894211060271407
880411769063535667
560553564512176618
1
962990836390050009
616597869896951268
878097339332572161
188820994675344528
997057718507559252
949074379610491450
1
632093288650732211
1
356502546608886970
789177332497135009
566104642...

result:

wrong answer 7th lines differ - expected: '183698346865682381', found: '1'