Problem
一个长度为n的序列,支持一堆操作,大致操作如下:
1.k在区间的排名(由小到大)2.区间第k小;3.单点修改;4&5:k的在区间上的前驱/后继。
机房最菜,没有之一。
统计$a, b \in [1, n] (a \leq b)$中,有多少个数对$(a, b)$满足$gcd(a, b) = a \bigoplus b$
来一波XCY的证明
如果$gcd(a, b) = a \oplus b$,那么$a \oplus b = b - a$
又$\because xor$有一个性质:
$|a - b| \leq a \oplus b \leq a + b$
$\therefore a \oplus b = b - a$
所以我们只要找到所有$a \oplus b = b - a$的情况,那么我们再判断一下$gcd(a, b) = a \oplus b$即可
1 | #include <bits/stdc++.h> |