File tree Expand file tree Collapse file tree 2 files changed +12
-12
lines changed Expand file tree Collapse file tree 2 files changed +12
-12
lines changed Original file line number Diff line number Diff line change @@ -34,12 +34,12 @@ template<class T, class F> struct linear_rmq {
3434 (asc[i] | asc[i - 1 ]) & -(in[i] & -in[i]);
3535 }
3636 int idx (int l, int r) { // [l, r]
37- if (unsigned j = in[l] ^ in[r]; j ) {
38- j = asc[l] & asc[r] & -bit_floor (j );
39- if (unsigned k = asc[l] ^ j; k )
40- k = bit_floor (k ), l = head[(in[l] & -k ) | k ];
41- if (unsigned k = asc[r] ^ j; k )
42- k = bit_floor (k ), r = head[(in[r] & -k ) | k ];
37+ if (unsigned i = in[l] ^ in[r]; i ) {
38+ i = asc[l] & asc[r] & -bit_floor (i );
39+ if (unsigned b = asc[l] ^ i; b )
40+ b = bit_floor (b ), l = head[(in[l] & -b ) | b ];
41+ if (unsigned b = asc[r] ^ i; b )
42+ b = bit_floor (b ), r = head[(in[r] & -b ) | b ];
4343 }
4444 return cmp (a[l], a[r]) ? l : r;
4545 }
Original file line number Diff line number Diff line change @@ -32,12 +32,12 @@ struct linear_lca {
3232 for (auto [v, p] : order) asc[v] = asc[p] | lsb (in[v]);
3333 }
3434 int lca (int u, int v) {
35- if (unsigned j = in[u] ^ in[v]; j ) {
36- j = asc[u] & asc[v] & -bit_floor (j );
37- if (unsigned k = asc[u] ^ j; k )
38- k = bit_floor (k ), u = head[(in[u] & -k ) | k ];
39- if (unsigned k = asc[v] ^ j; k )
40- k = bit_floor (k ), v = head[(in[v] & -k ) | k ];
35+ if (unsigned i = in[u] ^ in[v]; i ) {
36+ i = asc[u] & asc[v] & -bit_floor (i );
37+ if (unsigned b = asc[u] ^ i; b )
38+ b = bit_floor (b ), u = head[(in[u] & -b ) | b ];
39+ if (unsigned b = asc[v] ^ i; b )
40+ b = bit_floor (b ), v = head[(in[v] & -b ) | b ];
4141 }
4242 return d[u] < d[v] ? u : v;
4343 }
You can’t perform that action at this time.
0 commit comments