题面
【题目描述】
老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成。 有长为 N N N的数列,不妨设为 a 1 , a 2 , … , a N a_1,a_2,…,a_N a1,a2,…,aN。有如下三种操作形式:
( 1 ) (1) (1)把数列中的一段数全部乘一个值;
( 2 ) (2) (2)把数列中的一段数全部加一个值;
( 3 ) (3) (3)询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模 P P P的值。
【输入】
第一行两个整数 N N N和 P ( 1 ≤ P ≤ 1000000000 ) P(1≤P≤1000000000) P(1≤P≤1000000000)。
第二行含有 N N N个非负整数,从左到右依次为 a 1 , a 2 , … , a N , ( 0 ≤ a i ≤ 1000000000 , 1 ≤ i ≤ N ) a_1,a_2,…,a_N, (0≤a_i≤1000000000,1≤i≤N) a1,a2,…,aN,(0≤ai≤1000000000,1≤i≤N)。
第三行有一个整数 M M M,表示操作总数。
从第四行开始每行描述一个操作,输入的操作有以下三种形式:
操作1:“1 t g c”(不含双引号)。表示把所有满足 t ≤ i ≤ g t≤i≤g t≤i≤g的 a i a_i ai改为 a i × c ( 1 ≤ t ≤ g ≤ N , 0 ≤ c ≤ 1000000000 ) a_i×c(1≤t≤g≤N,0≤c≤1000000000) ai×c(1≤t≤g≤

本文解析了一道涉及线段树的数据结构问题,通过实例详细介绍了如何使用懒标记(lazy tag)处理区间加法和乘法操作,确保计算正确性和效率。
最低0.47元/天 解锁文章
1288

被折叠的 条评论
为什么被折叠?



