Advertisement
sidjha57

Sparse Table

Aug 3rd, 2021
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.58 KB | None | 0 0
  1. //https://codeforces.com/contest/1549/problem/D
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. using ll = long long;
  6. const int inf = 1e9+10;
  7. const ll inf_ll = 1e18+10;
  8. #define all(x) (x).begin(), (x).end()
  9. #define pb push_back
  10. #define cmax(x, y) (x = max(x, y))
  11. #define cmin(x, y) (x = min(x, y))
  12.  
  13. template<typename it, typename bin_op>
  14. struct sparse_table {
  15.  
  16.     using T = typename remove_reference<decltype(*declval<it>())>::type;
  17.     vector<vector<T>> t; bin_op f;
  18.  
  19.     sparse_table(it first, it last, bin_op op) : t(1), f(op) {
  20.         int n = distance(first, last);
  21.         t.assign(32-__builtin_clz(n), vector<T>(n));
  22.         t[0].assign(first, last);
  23.         for (int i = 1; i < t.size(); i++)
  24.             for (int j = 0; j < n-(1<<i)+1; j++)
  25.                 t[i][j] = f(t[i-1][j], t[i-1][j+(1<<(i-1))]);
  26.     }
  27.  
  28.     // returns f(a[l..r]) in O(1) time
  29.     T query(int l, int r) {
  30.         int h = floor(log2(r-l+1));
  31.         return f(t[h][l], t[h][r-(1<<h)+1]);
  32.     }
  33. };
  34.  
  35. int main() {
  36.     ios_base::sync_with_stdio(0); cin.tie(0);
  37.     int t; cin >> t;
  38.     while (t--) {
  39.         ll n; cin >> n;
  40.         vector<ll> a(n), d(n-1);
  41.         for (int i = 0; i < n; i++)
  42.             cin >> a[i];
  43.         for (int i = 0; i < n-1; i++)
  44.             d[i] = abs(a[i+1]-a[i]);
  45.         sparse_table g(all(d), [](ll x, ll y){
  46.             return __gcd(x, y);
  47.         });
  48.         int j = 0, ans = 1;
  49.         for (int i = 0; i < n-1; i++) {
  50.             while (j <= i && g.query(j, i) == 1) j++;
  51.             cmax(ans, i-j+2);
  52.         }
  53.         cout << ans << "\n";
  54.     }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement