trafik

Untitled

Nov 19th, 2022
822
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1.  
  2. int t[maxn * 4];
  3. vi a(maxn);
  4. void build(int v, int l, int r) {
  5.     if (l + 1 == r) {
  6.         t[v] = a[l];
  7.         return;
  8.     }
  9.     int m = (l + r) / 2, v1 = 2 * v + 1, v2 = 2 * v + 2;
  10.     build(v1, l, m);
  11.     build(v2, m, r);
  12.     t[v] = gcd(t[v1], t[v2]);
  13. }
  14. void upd(int v, int l, int r, int pos, int x) {
  15.     if (l + 1 == r) {
  16.         a[l] = x;
  17.         t[v] = x;
  18.         return;
  19.     }
  20.     int m = (l + r) / 2, v1 = 2 * v + 1, v2 = 2 * v + 2;
  21.     if (pos < m)
  22.         upd(v1, l, m, pos, x);
  23.     else
  24.         upd(v2, m, r, pos, x);
  25.     t[v] = gcd(t[v1], t[v2]);
  26. }
  27. int get(int v, int l, int r, int ql, int qr) {
  28.     if (ql <= l && r <= qr) return t[v];
  29.     if (l >= qr || r <= ql) return 0;
  30.     int m = (l + r) / 2, v1 = 2 * v + 1, v2 = 2 * v + 2;
  31.     int g1 = get(v1, l, m, ql, qr);
  32.     int g2 = get(v2, m, r, ql, qr);
  33.     return gcd(g1, g2);
  34. }
  35.  
Advertisement
Add Comment
Please, Sign In to add comment