题意
有 n n n次操作和一个空序列,每次操作在序列末尾增加一个数,并询问区间 [ l , r ] [l,r] [l,r]中有多少个子区间满足其 m e x mex mex等于 k k k。强制在线。
n ≤ 200000 n\le 200000 n≤200000
分析
从小到大枚举右端点 r r r,对于每个左端点 l l l,维护 m e x ( a l , ⋯ , a r ) mex(a_l,\cdots,a_r) mex(al,⋯,ar)的值。
m e x ( a l , ⋯ , a r ) mex(a_l,\cdots,a_r) mex(al,⋯,ar)的值对于 l l l而言肯定是单调不升的。新加入一个 a r + 1 a_{r+1} ar+1后,值会发生改变的就只有 m e x = a r + 1 mex=a_{r+1} mex=ar+1的那一段 l l l。可以暴力把改变后的每一段都找出来,而总段数不超过 n n n,因此总的复杂度是 O ( n ) O(n) O(n)的。
用线段树对每个数维护 n x nx nx表示从 a r + 1 a_{r+1} ar+1往前下一次出现位置。设 m e x