题目名称 2600. 交错和查询
输入输出 summ.in/out
难度等级 ★★★★
时间限制 3000 ms (3 s)
内存限制 256 MiB
测试数据 10
题目来源 Gravatarh 于2017-01-22加入
开放分组 全部用户
提交状态
分类标签
树状数组 线段树
分享题解
通过:9, 提交:14, 通过率:64.29%
Gravatarztx 100 0.923 s 7.94 MiB C++
Gravatarh 100 2.022 s 14.21 MiB C++
Gravatarh 100 2.482 s 15.74 MiB C++
Gravatarjuly 100 2.922 s 246.36 MiB C++
Gravatarh 100 3.472 s 31.00 MiB C++
Gravatarh 100 3.582 s 15.76 MiB C++
Gravatar梦那边的美好ET 100 4.731 s 156.72 MiB C++
GravatarFoolMike 100 9.098 s 156.69 MiB C++
GravatarFoolMike 100 27.174 s 54.65 MiB C++
GravatarFoolMike 70 8.945 s 78.49 MiB C++
关于 交错和查询 的近10条评论(全部评论)
这题爆long long爆的真爽
大佬们代码都辣么短 蒟蒻一脸懵逼 QAQ
顺便问一下FJWC2017是啥
Gravatarztx
2017-07-08 17:08 1楼

2600. 交错和查询

★★★★   输入文件:summ.in   输出文件:summ.out   简单对比
时间限制:3 s   内存限制:256 MiB

【题目描述】


无限循环数字串S由长度为n的循环节s构成。设s为12345(n=5),则数字串S为123451234512345…

设Si为S的第i位数字,在上面的例子中,S1=1,S2=2,S6=1。

设S的一个子串S[l,r]的交错和为sum(l,r):

sum(l,r) = Sl - S1+1 + Sl+2 - Sl+3 + … + (-1)r-lSr

如sum(2,7) = 2 - 3 + 4 - 5 + 1 - 2 = -3


现给定循环节s,要求支持两种操作:

1 pos digit:

修改循环节s上的某一位,即将spos改为digit。

2 l r:

求S[l,r]内所有子串的交错和的和,即


输出ans对109+7的模。


【输入格式】


第一行一个整数n,表示循环节s的长度。

第二行一个长度为n的数字串,表示循环节s。

第三行一个整数m,表示操作次数。

以下m行,每行3个整数。

若第一个数为1,表示是修改操作1 pos digit。

若第一个数为2,表示是询问操作2 l r。


【输出格式】


对于每个询问操作输出一行,表示答案。


【样例输入】

5

12345

5

2 1 5

2 6 10

1 3 5

2 1 5

2 1 6

【样例输出】

19

19

25

36

【数据范围】


对于10%的数据点,n, m <= 50;

对于20%的数据点,n, m <= 1000;

对于40%的数据点,1 <= l <= r <= n;

对于100%的数据点,n, m <= 200000;1 <= l <= r <= 1018;1 <= pos <= n;0 <= digit <= 9;