bhupixb

Index One based sparse table

Jan 25th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define int long long
  5. #define F first
  6. #define S second
  7. #define rep(i,a,n) for (int i = a; i <= n; ++i)
  8. #define fo(i, n) for (int i = 1; i <= n; ++i)
  9. #define all(v) v.begin(), v.end()
  10. #define pb push_back
  11. #define P pair < int, int >
  12. const int N = 3e3 + 5;
  13. int gcd(int a, int b){
  14. while(a && b)
  15. a > b ? (a %= b) : (b %= a);
  16. return a + b;
  17. }
  18. int a[N];
  19. class sparse{
  20. int tree[N][20], Log[N];
  21. public:
  22. sparse() {
  23. Log[1] = 0;Log[2] = 1;
  24. int let = 1;
  25. for(int i = 3; i < N; ++i){
  26. if(!(i & (i-1)))
  27. let += 1;
  28. Log[i] = let;
  29. }
  30. }
  31. void build(int n){
  32. for(int i = 1; i <= n; ++i)
  33. tree[i][0] = a[i];
  34. for(int j = 1; j <= 20; ++j) {
  35. for(int i = 1; i + (1 << j) <= n + 1; ++i)
  36. tree[i][j] = gcd(tree[i][j-1], tree[i + (1 << (j-1))][j-1]);
  37. }
  38. }
  39. int query(int l, int r){
  40. int j = Log[r-l+1];
  41. return gcd(tree[l][j], tree[r - (1 << j) + 1][j]);
  42. }
  43. };
  44. signed main(){
  45. ios_base::sync_with_stdio(NULL);
  46. cin.tie(NULL);
  47. cout.tie(NULL);
  48. sparse obj;
  49.  
  50.  
  51.  
  52.  
  53.  
  54. return 0;
  55. }
Add Comment
Please, Sign In to add comment