U541153 子集位运算
题目描述
给一个长度为$n$的数组$a_1,a_2,...,a_n$。要求维护两个操作:
$1$.修改数组中的一个位置。
$2$.询问区间$[l,r]$所有子集位运算$and$之和,对$10^9+7$取模。
我们定义集合$S=\{l,l+1,...,r\}$,$T$为$S$子集。
$f_T=a_{T_1}\ and\ a_{T_2}\ and...and\ a_{T_k}(k为集合T的大小,若k=0则f_T=0)$
所有子集位运算$and$之和为$\sum_{\\T\in S}f_T$。
输入格式
第一行一个正整数$n$。
第二行$n$个数,为数组$a$。
第三行一个正整数$m$。
接下来$m$行格式如下:
修改操作:$1\ x\ y $,将$a_x$修改为$y$。$(1\le x\le n)$
查询操作:$2\ l\ r$,计算区间$[l,r]$所有子集位运算$and$之和,对$10^9+7$取模。$(1\le l\le r\le n)$
输出格式
对于每次查询操作输出一行。
说明/提示
对于$30\%$数据,$1\le n,m\le10^3,0\le a_i,y\le10^6$。$\\$
对于$100\%$数据,$1\le n,m\le10^5,0\le a_i,y\le10^9$。