线段树。支持区间加、区间乘、区间查询和。

标记下移还有取模要注意。

  • 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 维护序列相关推荐

  1. BZOJ 1798: [Ahoi2009]Seq 维护序列seq

    二次联通门 : BZOJ 1798: [Ahoi2009]Seq 维护序列seq /*BZOJ 1798: [Ahoi2009]Seq 维护序列seq线段树主要是标记的顺序下放问题...乱搞一下就好. ...

  2. BZOJ 1798 题解

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Submit: 5531  Solved: 1946 [Subm ...

  3. BZOJ1798 【AHOI2009】 seq维护序列 线段树

    维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把 ...

  4. Letters Removing CodeForces - 899F (线段树维护序列)

    大意: 给定字符串, 每次删除一段区间的某种字符, 最后输出序列. 类似于splay维护序列. 每次删除都会影响到后面字符的位置 可以通过转化为查询前缀和=k来查找下标. #include <i ...

  5. 【线段树】[LUOGU 守墓人] [LUOGU 维护序列] 线段树模板题

    题目: 题目链接:[LUOGU 守墓人] 题解: 线段树单点修改,区间修改,单点查询,区间查询,一系列线段树基本操作,模板打就好. (回头再补一个分块和树状数组的这种板子题,就是用分块和树状数组再写一 ...

  6. [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)

    [BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...

  7. 【BZOJ】1798: [Ahoi2009]Seq 维护序列seq(线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1798 之前写了个快速乘..........................20多s...... 还好 ...

  8. bzoj 1798 5039: [Jsoi2014]序列维护(线段树)

    5039: [Jsoi2014]序列维护 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 17  Solved: 14 [Submit][Status ...

  9. HYSBZ - 1798 Seq 维护序列seq 线段树lazy标记

    传送门 这道题属实是线段树的道比刷题,又加又乘的,当然还可能会有乘除,阶乘等等可能的情况. 对于这道题,主要的一个就是怎么记录lazy标记,首先的话一个数组是肯定不行的,设乘的为lazy,加的为add ...

  10. BZOJ 4553: [Tjoi2016Heoi2016]序列

    #Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛姐姐已经研究出了 ...

最新文章

  1. 在vue.js中省市选择
  2. Spring Security的内置过滤器是如何维护的?
  3. 量子计算机区别于冯诺依曼机的一个显著特点,大学计算机基础习题答案西安交大.doc...
  4. boost::graph模块使用 read_graphviz 加载 GraphViz Dot 文本的示例 ,图转换为具有自定义属性的 BGL adjacency_list 图
  5. 使用POI读取excel文件内容
  6. mysql merge 分区_mysql merge 分区
  7. web实现数据交互的几种常见方式
  8. 别再拿div+css误导人了
  9. 浙江网信办处置44家违规网站 包含网易游戏、花瓣网等
  10. Windows中,文件所在路径查找命令
  11. Access安全性之QA详解
  12. 用Diff和Patch工具维护源码
  13. 机器人走正方形c语言代码,张西臣---机器人走正方形
  14. cloudera-scm-agent 已死,但 pid 文件存在
  15. XShell「6.0.0111」已激活授权绿色版v2
  16. python 读取并显示图片的两种方法
  17. 缤纷彩色文字广告代码,文字广告代码美化版,给网站添加文字广告教程
  18. Light Emitting Hindenburg(bitset运用)
  19. 2021年上半年全球首席执行官任命达到创纪录水平,女性首席执行官翻了一番|美通社头条...
  20. 经典DP:测试鸡蛋承受力

热门文章

  1. 接口隔离原则_设计模式的三大分类及六大原则
  2. 计算机对油画的影响,现代电脑美术影响下的油画艺术创作
  3. easyexcel 动态列_easyexcel动态表头列导出SequenceDiagram 阅读源码事半功倍
  4. 恢复html的初始选定状态,Adobe Photoshop
  5. 2M线路保护实现与应用
  6. 交换机用光纤模块互连一端灯不亮或两端都不亮,如何处理?
  7. 【渝粤教育】 广东开放大学 10548_金融学k1_21秋考试
  8. [渝粤教育] 广东-国家-开放大学 21秋期末考试中国近现代史纲要(A)10881k1
  9. 国家开放大学2021春1129土木工程力学(本)题目
  10. 亿佰特电源模块:无线通信模块电平转换指南