题目背景
Chimuzu 省选一轮爆了两个大零蛋,于是滚回去学文化课了。
他翻出一道基础四则运算练习题……然后发现自己不会。
于是他需要你的帮助,作为回报,他会给你 100 分。
前排打广告,有人来看看我写的融合树吗
(其实还写了 Brodal queue)
题目描述
Chimuzu 手上有一个数字序列 {a1,a2,…,an} 和一个运算符序列 {p1,p2,…,pn−1}。其中 pi 只能为 + 或 ×。
我们定义一个区间 [l,r] 的权值 w(l,r) 为将字符串
al pl al+1 pl+1⋯ar−1 pr−1 ar写下来之后,按照运算符的优先级计算出的结果。
下面给出一个运算的例子:
若 a={1,3,5,7,9,11},p={+,×,×,+,×},那么有:
w(1,6)=1+3×5×7+9×11=205
w(3,6)=5×7+9×11=134
Chimuzu 需要你对这两个序列进行修改,同时查询某个给定区间的权值。
你需要维护这 3 个操作:
操作一:给定 l,r,x,将 al,al+1,…,ar 全部修改成 x。
操作二:给定 l,r,y:将 pl,pl+1,…,pr 全部修改成 y,0 表示 +,1 表示 ×。
操作三:给定 l,r:查询 w(l,r)mod1000000007 的值。
输入格式
第一行包含两个整数 n,m。
第二行包含 n 个整数 a1,a2,…,an。
第三行包含 n−1 个整数 p1,p2,⋯,pn−1,0 表示 +, 1
表示 ×。
接下来 m 行,每行有一个操作。
一开始输入一个标识符 op,表示操作类型,接着按照题目描述输入各操作的参数。
op=1 时,输入 3 个整数 l,r,x,表示将 al,al+1,…,ar 全部修改成 x。
op=2 时,输入 3 个整数 l,r,y,表示将 pl,pl+1,…,pr 全部修改成 y,0 表示 +,1 表示 ×。
op=3 时,输入 2 个整数 l,r,表示查询 w(l,r)mod1000000007 的值。
输出格式
对于每一次操作 3,输出 1 行 1 个整数表示所求答案。
提示
样例解释 1
初始的两个序列和前两次操作是题目描述中的例子。第四次操作结束后,两个序列变成了如下形态
a={13,13,5,7,9,11},p={+,×,×,×,×}
w(1,6)=13+13×5×7×9×11=45058w(3,6)=5×7×9×11=3465
数据范围与约定
对于其中 1% 的数据,为样例 1,时限为 1.5s
对于另外 14%的数据,n,m≤1000 ,时限为 1.5s
对于另外 5% 的数据,没有修改操作,时限为 1.5s
对于另外 14% 的数据,数据保证随机,时限为 1.5s
对于另外 19% 的数据,没有 1 操作,时限为 1.5s
对于另外 19% 的数据,没有 2 操作,时限为 1.5s
对于另外 8% 的数据,时限为 5s
对于另外 10% 的数据,时限为 3s
对于 100% 的数据,n,m≤100000,1≤ai,x<232,ai,x 均为奇数,pi,y∈{0,1},1≤l≤r≤n,所有操作 2 还满足 r<n。时限为 1.5s
Idea:Juan_feng。
Solution:nzhtl1477,ccz181078。
Code:Juan_feng,nzhtl1477,rehtorbegnaro,ccz181078。
Data:Juan_feng,nzhtl1477,rehtorbegnaro。