给定含幺半群 $(D,+,e)$,给定 $D$ 中的元素构成的序列 $a_1,\dots,a_n$,初值都为 $e$,支持 $m$ 次操作,每次操作可以是单点修改,或查区间和。
限制每次修改操作使用 $+$ 的次数不超过 $M_1$;
限制每次查询操作使用 $+$ 的次数不超过 $M_2$;
幺半群的基本性质:
$\forall a\in D,\; e+a=a+e=a$
$\forall a,b,c\in D,\;(a+b)+c=a+(b+c)$
这是一道交互题,你需要包含头文件 lib.h
,或将其内容放在程序的最前面。
下发的头文件 lib.h
的内容如下:
struct Data{
unsigned short a,b,c,d;
};
Data operator+(Data a,Data b);
void init(int n,int k,Data d);
void update(int x,Data d);
Data query(int l,int r);
其中 Data
表示 $D$,Data operator+
表示 $+$,交互库给出了这部分的实现;
你需要实现:
init
用于初始化,n,k,d
依次表示 $n,M_2$ 和 $D$ 的单位元 $e$,你可以使用 $+$,但由于 $e+e=e$ 而不能得出有用的结果;
update
表示一次修改操作,将 $a_x$ 修改为 $d$;
query
表示一次查询区间和的操作,查询 $a_l+a_{l+1}+\dots+a_r$,查询结果应当作为返回值返回;
子任务
Idea:ccz181078,Solution:ccz181078,Code:ccz181078,Data:ccz181078
对所有数据,满足 $n=10^5,\;m=2\times 10^5$
数据点编号 | $M_1$ | $M_2$ | 分数 |
---|---|---|---|
1 | 4000 | 2 | 11 |
2 | 700 | 3 | 7 |
3 | 400 | 4 | 5 |
4 | 200 | 5 | 4 |
5 | 200 | 6 | 4 |
6 | 100 | 7 | 3 |
7 | 80 | 8 | 3 |
8 | 60 | 9 | 3 |
9 | 2811 | 2 | 16 |
10 | 542 | 3 | 11 |
11 | 272 | 4 | 8 |
12 | 137 | 5 | 7 |
13 | 113 | 6 | 5 |
14 | 75 | 7 | 5 |
15 | 69 | 8 | 4 |
16 | 48 | 9 | 4 |
lib\down
目录为下发的交互库文件
lib\require
目录为评测用的交互库文件
data
目录为评测用的测试点
data2
目录为下发的样例