BZOJ-1798 维护序列
线段树。支持区间加、区间乘、区间查询和。
标记下移还有取模要注意。
var
n,p,q,i,s,t:longint;
a:int64;
num,n1,n2,n3:array[0..500000] of int64;
procedure build(o,l,r:longint);
var m,i:longint;
begin
m:=(l+r) div 2;
if l=r then
begin
n1[o]:=num[l];
n2[o]:=num[l];
end
else
begin
build(o*2,l,m);
build(o*2+1,m+1,r);
end;
if o>1 then n1[o div 2]:=(n1[o div 2]+n1[o]) mod p;
end;
procedure add(o,l,r:longint);
var m,i:longint;
begin
m:=(l+r) div 2;
if l<>r then
begin
n1[o*2]:=(n1[o*2]*n3[o]+n2[o]*((m-l+1) mod p)) mod p;
n2[o*2]:=(n2[o*2]*n3[o]+n2[o]) mod p;
n3[o*2]:=(n3[o*2]*n3[o]) mod p;
n1[o*2+1]:=(n1[o*2+1]*n3[o]+n2[o]*((r-m) mod p)) mod p;
n2[o*2+1]:=(n2[o*2+1]*n3[o]+n2[o]) mod p;
n3[o*2+1]:=(n3[o*2+1]*n3[o]) mod p;
n2[o]:=0;n3[o]:=1;
end;
if (s<=l)and(r<=t) then
begin
n1[o]:=(n1[o]+a*((r-l+1) mod p)) mod p;
n2[o]:=(n2[o]+a) mod p;
end
else
begin
if s<m+1 then add(o*2,l,m);
if m<t then add(o*2+1,m+1,r);
n1[o]:=(n1[o*2]+n1[o*2+1]) mod p;
end;
end;
procedure che(o,l,r:longint);
var m,i:longint;
begin
m:=(l+r) div 2;
if l<>r then
begin
n1[o*2]:=(n1[o*2]*n3[o]+n2[o]*((m-l+1) mod p)) mod p;
n2[o*2]:=(n2[o*2]*n3[o]+n2[o]) mod p;
n3[o*2]:=(n3[o*2]*n3[o]) mod p;
n1[o*2+1]:=(n1[o*2+1]*n3[o]+n2[o]*((r-m) mod p)) mod p;
n2[o*2+1]:=(n2[o*2+1]*n3[o]+n2[o]) mod p;
n3[o*2+1]:=(n3[o*2+1]*n3[o]) mod p;
n2[o]:=0;n3[o]:=1;
end;
if (s<=l)and(r<=t) then
begin
n1[o]:=(n1[o]*a) mod p;
n2[o]:=(n2[o]*a) mod p;
n3[o]:=(n3[o]*a) mod p;
end
else
begin
if s<m+1 then che(o*2,l,m);
if m<t then che(o*2+1,m+1,r);
n1[o]:=(n1[o*2]+n1[o*2+1]) mod p;
end;
end;
function que(o,l,r:longint):int64;
var m,i:longint;
begin
m:=(l+r) div 2;
que:=0;
if l<>r then
begin
n1[o*2]:=(n1[o*2]*n3[o]+n2[o]*((m-l+1) mod p)) mod p;
n2[o*2]:=(n2[o*2]*n3[o]+n2[o]) mod p;
n3[o*2]:=(n3[o*2]*n3[o]) mod p;
n1[o*2+1]:=(n1[o*2+1]*n3[o]+n2[o]*((r-m) mod p)) mod p;
n2[o*2+1]:=(n2[o*2+1]*n3[o]+n2[o]) mod p;
n3[o*2+1]:=(n3[o*2+1]*n3[o]) mod p;
n2[o]:=0;n3[o]:=1;
end;
if (s<=l)and(r<=t) then que:=n1[o]
else
begin
if s<m+1 then que:=(que+que(o*2,l,m)) mod p;
if m<t then que:=(que+que(o*2+1,m+1,r)) mod p;
end;
end;
begin
read(n,p);
for i:=1 to n do read(num[i]);
for i:=1 to n do num[i]:=num[i] mod p;
for i:=1 to 3*n do n3[i]:=1;
build(1,1,n);
read(q);
for i:=1 to q do
begin
read(a);
case a of
1:begin
read(s,t,a);
a:=a mod p;
che(1,1,n);
end;
2:begin
read(s,t,a);
a:=a mod p;
add(1,1,n);
end;
3:begin
read(s,t);
writeln(que(1,1,n));
end;
end;
end;
end.
我写的有些麻烦。。。
转载于:https://www.cnblogs.com/NanoApe/p/4396760.html
BZOJ-1798 维护序列相关推荐
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq
二次联通门 : BZOJ 1798: [Ahoi2009]Seq 维护序列seq /*BZOJ 1798: [Ahoi2009]Seq 维护序列seq线段树主要是标记的顺序下放问题...乱搞一下就好. ...
- BZOJ 1798 题解
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Submit: 5531 Solved: 1946 [Subm ...
- BZOJ1798 【AHOI2009】 seq维护序列 线段树
维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把 ...
- Letters Removing CodeForces - 899F (线段树维护序列)
大意: 给定字符串, 每次删除一段区间的某种字符, 最后输出序列. 类似于splay维护序列. 每次删除都会影响到后面字符的位置 可以通过转化为查询前缀和=k来查找下标. #include <i ...
- 【线段树】[LUOGU 守墓人] [LUOGU 维护序列] 线段树模板题
题目: 题目链接:[LUOGU 守墓人] 题解: 线段树单点修改,区间修改,单点查询,区间查询,一系列线段树基本操作,模板打就好. (回头再补一个分块和树状数组的这种板子题,就是用分块和树状数组再写一 ...
- [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)
[BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...
- 【BZOJ】1798: [Ahoi2009]Seq 维护序列seq(线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1798 之前写了个快速乘..........................20多s...... 还好 ...
- bzoj 1798 5039: [Jsoi2014]序列维护(线段树)
5039: [Jsoi2014]序列维护 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 17 Solved: 14 [Submit][Status ...
- HYSBZ - 1798 Seq 维护序列seq 线段树lazy标记
传送门 这道题属实是线段树的道比刷题,又加又乘的,当然还可能会有乘除,阶乘等等可能的情况. 对于这道题,主要的一个就是怎么记录lazy标记,首先的话一个数组是肯定不行的,设乘的为lazy,加的为add ...
- BZOJ 4553: [Tjoi2016Heoi2016]序列
#Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛姐姐已经研究出了 ...
最新文章
- 在vue.js中省市选择
- Spring Security的内置过滤器是如何维护的?
- 量子计算机区别于冯诺依曼机的一个显著特点,大学计算机基础习题答案西安交大.doc...
- boost::graph模块使用 read_graphviz 加载 GraphViz Dot 文本的示例 ,图转换为具有自定义属性的 BGL adjacency_list 图
- 使用POI读取excel文件内容
- mysql merge 分区_mysql merge 分区
- web实现数据交互的几种常见方式
- 别再拿div+css误导人了
- 浙江网信办处置44家违规网站 包含网易游戏、花瓣网等
- Windows中,文件所在路径查找命令
- Access安全性之QA详解
- 用Diff和Patch工具维护源码
- 机器人走正方形c语言代码,张西臣---机器人走正方形
- cloudera-scm-agent 已死,但 pid 文件存在
- XShell「6.0.0111」已激活授权绿色版v2
- python 读取并显示图片的两种方法
- 缤纷彩色文字广告代码,文字广告代码美化版,给网站添加文字广告教程
- Light Emitting Hindenburg(bitset运用)
- 2021年上半年全球首席执行官任命达到创纪录水平,女性首席执行官翻了一番|美通社头条...
- 经典DP:测试鸡蛋承受力
热门文章
- 接口隔离原则_设计模式的三大分类及六大原则
- 计算机对油画的影响,现代电脑美术影响下的油画艺术创作
- easyexcel 动态列_easyexcel动态表头列导出SequenceDiagram 阅读源码事半功倍
- 恢复html的初始选定状态,Adobe Photoshop
- 2M线路保护实现与应用
- 交换机用光纤模块互连一端灯不亮或两端都不亮,如何处理?
- 【渝粤教育】 广东开放大学 10548_金融学k1_21秋考试
- [渝粤教育] 广东-国家-开放大学 21秋期末考试中国近现代史纲要(A)10881k1
- 国家开放大学2021春1129土木工程力学(本)题目
- 亿佰特电源模块:无线通信模块电平转换指南