【题解】「AHOI2009」维护序列(线段树)

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

题面

【题目描述】
老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成。 有长为 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(1P1000000000
第二行含有 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,(0ai1000000000,1iN)
第三行有一个整数 M M M,表示操作总数。
从第四行开始每行描述一个操作,输入的操作有以下三种形式:
操作1:“1 t g c”(不含双引号)。表示把所有满足 t ≤ i ≤ g t≤i≤g tig 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(1tg

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值