Euclid’s lemma
若素数$p$为$ab$的约数,那么$p$至少是$a$,$b$这两个数中的一个数的约数。也就是说,$p\mid ab,p\not\mid a \Rightarrow p\mid b$。
它还有一个推广:
有一个序列,序列中的每一个元素有两个值$h_i$与$val_i$。你需要回答若干次询问,每一次询问针对于一个区间$[l,r]$,设$l\le p_1<p_2\cdots p_k\le r$,其中$p_k$是$[l,r]$中$h_i$最大的位置,$p_{k-1}$是$[l,p_k-1]$中$h_i$最大的位置……你需要回答出这些位置的$val_i$的某些可以区间合并的信息(和/最大最小值……)。
可以对序列中元素的$h_i,val_i$进行修改。
食用方法:树上路径数颜色。
我们构造一棵树的括号序:即,dfs一棵树的时候,在发现一个节点时,记此时的$idx$为这个节点的$In$,然后让$idx++$;结束对一个节点的访问时,记此时的$idx$为这个节点的$Out$,然后让$idx++$。这样,$u$和$v$之间路径,就转化括号序中的区间$[Out_u,In_v]$,其中我们要求区间中出现了$0$次或者$2$次的节点都不计贡献(说白了就是挪指针的时候进行类似异或的操作),即:
2016集训队论文集 吉如一《区间最值操作与历史最值问题》
维护一个长度为$n$的序列,支持以下操作:
$0 l r t$:对于所有$i \in [l,r]$,将$a_i$修改为$\min \{ a_i,t\} $。
$1 l r$:查询区间$l,r$的最大元素的值。
$2 l r$:查询区间$l,r$元素的和。