CF1030F.Putting Boxes Together
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
There is an infinite line consisting of cells. There are n boxes in some cells of this line. The i -th box stands in the cell ai and has weight wi . All ai are distinct, moreover, ai−1<ai holds for all valid i .
You would like to put together some boxes. Putting together boxes with indices in the segment [l,r] means that you will move some of them in such a way that their positions will form some segment [x,x+(r−l)] .
In one step you can move any box to a neighboring cell if it isn't occupied by another box (i.e. you can choose i and change ai by 1 , all positions should remain distinct). You spend wi units of energy moving the box i by one cell. You can move any box any number of times, in arbitrary order.
Sometimes weights of some boxes change, so you have queries of two types:
- id nw — weight wid of the box id becomes nw .
- l r — you should compute the minimum total energy needed to put together boxes with indices in [l,r] . Since the answer can be rather big, print the remainder it gives when divided by 1000000007=109+7 . Note that the boxes are not moved during the query, you only should compute the answer.
Note that you should minimize the answer, not its remainder modulo 109+7 . So if you have two possible answers 2⋅109+13 and 2⋅109+14 , you should choose the first one and print 109+6 , even though the remainder of the second answer is 0 .
输入格式
The first line contains two integers n and q ( 1≤n,q≤2⋅105 ) — the number of boxes and the number of queries.
The second line contains n integers a1,a2,…an ( 1≤ai≤109 ) — the positions of the boxes. All ai are distinct, ai−1<ai holds for all valid i .
The third line contains n integers w1,w2,…wn ( 1≤wi≤109 ) — the initial weights of the boxes.
Next q lines describe queries, one query per line.
Each query is described in a single line, containing two integers x and y . If x<0 , then this query is of the first type, where id=−x , nw=y ( 1≤id≤n , 1≤nw≤109 ). If x>0 , then the query is of the second type, where l=x and r=y ( 1≤lj≤rj≤n ). x can not be equal to 0 .
输出格式
For each query of the second type print the answer on a separate line. Since answer can be large, print the remainder it gives when divided by 1000000007=109+7 .
输入输出样例
输入#1
5 8 1 2 6 7 10 1 1 1 1 2 1 1 1 5 1 3 3 5 -3 5 -1 10 1 4 2 5
输出#1
0 10 3 4 18 7
说明/提示
Let's go through queries of the example:
- 1 1 — there is only one box so we don't need to move anything.
- 1 5 — we can move boxes to segment [4,8] : 1⋅∣1−4∣+1⋅∣2−5∣+1⋅∣6−6∣+1⋅∣7−7∣+2⋅∣10−8∣=10 .
- 1 3 — we can move boxes to segment [1,3] .
- 3 5 — we can move boxes to segment [7,9] .
- −3 5 — w3 is changed from 1 to 5 .
- −1 10 — w1 is changed from 1 to 10 . The weights are now equal to w=[10,1,5,1,2] .
- 1 4 — we can move boxes to segment [1,4] .
- 2 5 — we can move boxes to segment [5,8] .