Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- #define int long long
- int gsd(int a, int b) {
- return (b == 0 ? a : gsd(b, a % b));
- }
- int main() {
- int n, k, news;
- cin >> n >> k;
- vector<int> vec(n);
- for (int i = 0; i < n; i++) cin >> vec[i];
- for (int i = 0; i < k - (n % k); i++) vec.push_back(0);
- vector<int> l(1, 0), r(1, 0);
- for (int j = k - 1; j >= 0; j--)
- l.push_back(gsd(max(l.back(), vec[j]), min(l.back(), vec[j])));
- int maxx = l.back();
- for (int i = k; i < vec.size(); i++) {
- if (l.size() == 1) {
- r.clear(); r.push_back(0);
- for (int j = i - 1; j >= i - k; j--)
- l.push_back(gsd(max(l.back(), vec[j]), min(l.back(), vec[j])));
- }
- l.pop_back();
- r.push_back(gsd(max(r.back(), vec[i]), min(r.back(), vec[i])));
- maxx = max(maxx, gsd(max(r.back(), l.back()), min(r.back(), l.back())));
- }
- cout << maxx;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement