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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab pca可视化,利用Matlab实现PCA demo展示

input_data rand(1000,3);%随机生成1000个样本&#xff0c;每个样本有x,y,z三个属性 figure(1);%控制画图的窗口为1hold off;%使当前轴和图形不再具备被刷新的性质&#xff0c;关闭在此基础上再画图plot3(input_data(:,1), input_data(:,2), input_data(:,3), ‘ro‘);%% Func…

matlab短均线滞后项,均线理论的滞后性问题

对移动平均线有一定了解的人都会发现移动平均线理论存在一个缺点&#xff0c;那就是移动平均线的信号具有一定的滞后性&#xff0c;这是制约移动平均线运用的最大因素。介绍了均线的计算方法.从它的计算方法中也能看出目前均线的数值要受到前一阶段股价的影响&#xff0c;而且均…

IOS侧滑框架合集

侧滑框架 https://github.com/gresrun/GHSidebarNav https://github.com/ipup/PPRevealSideViewController https://github.com/gotosleep/JASidePanels https://github.com/jamztang/JTRevealSidebarDemo https://github.com/ECSlidingViewController/ECSlidingViewController…

python捕获摄像头帧_Xuggler教程:帧捕获和视频创建

python捕获摄像头帧注意&#xff1a;这是我们的“ Xuggler开发教程 ”系列的一部分。 到目前为止&#xff0c;在我们的Xuggler教程系列中&#xff0c;我们已经对视频处理的Xuggler进行了介绍&#xff0c;并讨论了转码和媒体修改 。 在本教程中&#xff0c;我们将看到如何解码视…

【python核心编程】第六章 序列

1、操作符 &#xff08;1&#xff09;成员关系操作符&#xff1a;in 、not in >>> string abcdefg>>> a in stringTrue>>> h in stringFalse>>> h not in stringTrue *补充知识*&#xff1a;string模块 >>> import string>>…

java物业管理系统设计,JAVA物业管理系统设计与实现(论文+源代码)

【实例简介】JAVA物业管理系统设计与实现(论文源代码)【实例截图】【核心代码】JAVA物业管理系统设计与实现(论文源代码)└── JAVA物业管理系统设计与实现(论文源代码)├── JAVA物业管理系统设计与实现(论文源代码)│ ├── JAVA物业管理系统│ │ ├── JWS│ │…

MyEclipse 编写 ExtJS 卡死问题解决方法

MyEclipse 8.6 在 jsp 中编写 ExtJS时&#xff0c;会出现卡死现象&#xff0c;让人甚是头疼。网上找了很多方法&#xff0c;折腾半天&#xff0c;还是不管用。 什么MyEclipse 优化&#xff0c;Validation 取消&#xff0c;MyEclipse 在 JSP 中打 "点" 时&#xff0…

matlab试用版的user id,免费试用MATLAB

请选择其一AlabamaAlaska美属萨摩亚APO/FPO AAAPO/FPO AEAPO/FPO APArizonaArkansasCaliforniaCaroline IslandsColoradoConnecticutDelawareDistrict of ColumbiaFlorida格鲁吉亚关岛HawaiiIdahoIllinoisIndianaIowaKansasKentuckyLouisianaMaineMariana Islands马绍尔群岛Mar…

java的aqs是什么,AQS在Java中的应用

上篇文章我们详细分析了AQS的底层实现原理,这节就来探索jdk中使用AQS实现的工具类ReentrantLock一, 是什么?怎么用?是什么?是一个独占锁,也就是在并发环境下同一时刻只能有一个线程获得资源,也是一个可重入锁.可重入锁: 一个线程已经获取到了该资源,下次再次获取资源时不会出…

jasper 获取当前日期_入侵Jasper以获取JSP页面的对象模型

jasper 获取当前日期为了对我的JSP执行一些检查和统计分析&#xff0c;我需要一个包含在其中的元素的类似于DOM的层次模型。 但是&#xff0c;解析JSP页面并不是一件容易的事&#xff0c;最好留给它一个出色的工具-Tomcat&#xff0c;Jetty&#xff0c;GlassFish以及其他所有工…

php怎么把字符转成大写,php怎么把字符串转换为大写

php把字符串转换为大写的方法&#xff1a;可以利用内置函数strtoupper()来进行转换。strtoupper()函数可以把指定的字符串转换为大写&#xff0c;并返回被转换为大写的字符串。使用函数&#xff1a;(学习视频推荐&#xff1a;php视频教程)strtoupper() 函数把字符串转换为大写&…

C#开发 —— 基础知识

C# 用于开发可以运行在 .Net 平台上的应用程序&#xff0c;C# 本身只是一种语言&#xff0c;尽管它是用于生成面向 .Net 环境的代码&#xff0c;但它本身不是 .Net 的一部分 Console.WriteLine 命名空间 —— using 指令将命名空间名所标识的命名空间内的类型成员导入到当前编译…

JMS 2.0的新增功能

这篇文章列出了JMS 2.0 &#xff08; Java EE 7平台的一部分&#xff09;引入的所有新API&#xff08;接口/类/注释等&#xff09;。 这些分类如下 API简化 使用方便 异常处理 杂 这是一个简短的摘要以及一些代码片段 API简化 JMSContext 在Connection和Session对象之上…

oracle存储过程与函数的区别及作用,Oracle存储过程与存储函数-入门

文章思维导图一. 存储过程和存储函数的定义定义&#xff1a;存储在数据库中&#xff0c;供所有用户程序调用的子程序叫做存储过程/存储函数。复杂点的解释&#xff1a;存储过程(Stored Procedure)&#xff0c;就是一组用于完成特定数据库功能的SQL 语句集&#xff0c;该SQL语句…

CC++初学者编程教程(8) VS2013配置编程助手与QT

1. 2. 配置编程助手 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19&#xff0e; 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30&#xff0e; 31. 32&#xff0e; 33. 34. 35. 36. 37. 38. 39 40 41 42 43 这个时候我们就在VS2013里面集成了QT&#xff0c;编程助…

java内存模型概述_Java内存模型-快速概述和注意事项

java内存模型概述在计算中&#xff0c; 内存模型描述了线程如何通过内存交互&#xff0c;或更一般地&#xff0c;它指定了为分段内存或分页内存平台生成代码时允许编译器进行的假设。 在给定程序和该程序的执行跟踪的情况下&#xff0c;它实质上描述了执行跟踪是否是该程序的合…

oracle目录删除后恢复,Oracle删除后不能重新安装的解决方法

很多朋友只用了Oracle的删除&#xff0c;但很多情况下&#xff0c;他会发现重新安装时&#xff0c;点了下一步安装界面就消失了&#xff0c;往往无奈下只好重装系统&#xff0c;其实只是你数据库没删干净&#xff0c;删干净就不会出现这种情况了。实现方法&#xff1a;1、 开始…

jquery简单实现树形结构收缩展开效果

代码量很少&#xff0c;注意要取消冒泡 e.stopPropagation(); <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><title></title><style type"text/css">.child{ display: none;}li{ cu…

转子碰磨 matlab,航空科普:什么是航空发动机转子碰磨?

中国航空报讯&#xff1a;随着人们对航空发动机油耗、推重比等要求的逐步提高&#xff0c;提升航空发动机运行效率&#xff0c;尤其是提升民用航空发动机的经济性已经变得越来越重要。航空发动机的总体运行效率是气动效率、燃烧效率、冷却效率与机械效率等共同决定的。其中&…

Android 自定义 ListView 显示网络上 JSON 格式歌曲列表

本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章&#xff0c;没有源代码可下载&#xff0c;根据文中提供的代码片段&#xff0c;自己新建的项目&#xff08;比较可恶的是&#xff0c;没有图标图片资源&…