【洛谷P2023】维护序列
这个板子不打就是手生……一段时间不会处理线段树了qwq,这个题难点就是在于下放标记
#include<iostream> #include<cstring> #include<cstdio> using namespace std; typedef long long lo; lo n,p,m,a[100010],x,y,z,fl,qwq; struct in {lo l,r,s,f1,f2; }ter[400040]; inline void re(lo &c) {c=0;char b=getchar();while(b<'0'||b>'9')b=getchar();while(b>='0'&&b<='9')c=c*10+b-'0',b=getchar(); } inline void u(lo w) {ter[w].s=((ter[w<<1].s%p)+(ter[w<<1|1].s%p))%p; } inline void build(lo l,lo r,lo w) {ter[w]=(in){l,r,0,1,0};if(l==r){ter[w].s=a[l];return;}lo mid=l+r>>1;build(l,mid,w<<1),build(mid+1,r,w<<1|1);u(w); } inline void d(lo w) {lo f1=ter[w].f1,f2=ter[w].f2;if(f1==1&&f2==0)return;ter[w<<1].f1*=f1,ter[w<<1].f1%=p;//不管加法还是乘法的flag都要乘上他们父亲的乘法flag ter[w<<1|1].f1*=f1,ter[w<<1|1].f1%=p;ter[w<<1].f2*=f1,ter[w<<1].f2%=p;ter[w<<1|1].f2*=f1,ter[w<<1|1].f2%=p;ter[w<<1].f2+=f2,ter[w<<1].f2%=p;//加法还要加上 ter[w<<1|1].f2+=f2,ter[w<<1|1].f2%=p;ter[w<<1].s*=f1,ter[w<<1].s%=p;//先乘再加 ter[w<<1|1].s*=f1,ter[w<<1|1].s%=p;ter[w<<1].s+=f2*(ter[w<<1].r-ter[w<<1].l+1),ter[w<<1].s%=p;ter[w<<1|1].s+=f2*(ter[w<<1|1].r-ter[w<<1|1].l+1),ter[w<<1|1].s%=p;ter[w].f1=1,ter[w].f2=0;//乘法的flag赋为1是因为最起码*1,不能*0 } void cha1(lo l,lo r,lo jia,lo w) {if(ter[w].l==l&&ter[w].r==r)//乘法是一起乘 {ter[w].f1*=jia,ter[w].f1%=p;ter[w].f2*=jia,ter[w].f2%=p;ter[w].s*=jia,ter[w].s%=p;return;}d(w);lo mid=ter[w].l+ter[w].r>>1;if(r<=mid)cha1(l,r,jia,w<<1);else if(l>mid)cha1(l,r,jia,w<<1|1);elsecha1(l,mid,jia,w<<1),cha1(mid+1,r,jia,w<<1|1);u(w); } void cha2(lo l,lo r,lo jia,lo w) {if(ter[w].l==l&&ter[w].r==r)//加法是单独加在加法的flag上 {ter[w].f2+=jia,ter[w].f2%=p;ter[w].s+=jia*(ter[w].r-ter[w].l+1),ter[w].s%=p;return;}d(w);lo mid=ter[w].l+ter[w].r>>1;if(r<=mid)cha2(l,r,jia,w<<1);else if(l>mid)cha2(l,r,jia,w<<1|1);elsecha2(l,mid,jia,w<<1),cha2(mid+1,r,jia,w<<1|1);u(w); } lo ask(lo l,lo r,lo w) {if(ter[w].l==l&&ter[w].r==r)return ter[w].s;lo mid=ter[w].l+ter[w].r>>1,re=0;d(w);if(r<=mid)re+=ask(l,r,w<<1)%p;else if(l>mid)re+=ask(l,r,w<<1|1)%p;elsere+=ask(l,mid,w<<1)%p,re+=ask(mid+1,r,w<<1|1)%p;u(w);return re; } int main() {re(n),re(p);for(int i=1;i<=n;i++)re(a[i]);build(1,n,1);//建树 re(m);for(int i=1;i<=m;i++){re(fl),re(x),re(y);if(fl==1)re(z),cha1(x,y,z,1);//区间乘 if(fl==2)re(z),cha2(x,y,z,1);//区间加 if(fl==3)qwq=ask(x,y,1)%p,printf("%lld\n",qwq);//查询 } }
转载于:https://www.cnblogs.com/Loi-dfkdsmbd/articles/7806380.html
【洛谷P2023】维护序列相关推荐
- 洛谷P2023 [AHOI2009]维护序列
数据比线段树2要毒瘤,一直60分的原因是: 1.long long 没开 2.没有边做边%或者像我P3373一样写了个看着像的边做边% 3.要看注释的话可以跳到P3373 上代码 1 #include ...
- 洛谷 - P3246 [HNOI2016]序列(莫队+单调栈)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问需要回答一个区间 [l,r][l,r][l,r] 内所有子区间的最小值之和 题目分析:因为可以离线,所以考 ...
- 【洛谷P1430】序列取数【dp】
题目大意: 题目链接:https://www.luogu.org/problemnew/show/P1430 给定一个长为n的整数序列,由A和B轮流取数(A先取).每个人可从序列的左端或右端取若干个数 ...
- 洛谷 - P3321 [SDOI2015]序列统计(原根+NTT)
题目链接:点击查看 题目大意:给出一个集合 SSS,集合中的数是 [0,m)[0,m)[0,m) 且互不相同的,问从集合中选 nnn 次数字,且乘积对 mmm 取模后等于 xxx 的方案数有多少 题目 ...
- YBTOJ洛谷P2042:维护数列(平衡树)
文章目录 题目描述 解析 删除区间 插入数列 修改&翻转 区间和&最大子段和 代码 传送门 题目描述 解析 阴间题- 这不是裸的板子吗? 国赛真的有人能把这题写出来吗- 应该算一道练习 ...
- 洛谷P2501数字序列 动态规划
题目 题目链接 题解 这道题目我觉得是神题,非常有意思的题目,也挺难做的. 第一问:求最少需要改变的数量 这一问比较简单,之前也见过这种套路. 定义dp[i]dp[i]dp[i]表示aaa序列中a[1 ...
- 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000- 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...
- 洛谷P3648 [APIO2014]序列分割(斜率优化)
传送门 没想到这种多个状态转移的还能用上斜率优化--学到了-- 首先我们可以发现,切的顺序对最终答案是没有影响的 比方说有一个序列$abc$,每一个字母都代表几个数字,那么先切$ab$再切$bc$,得 ...
- 洛谷P3152 正整数序列
文章目录 题目 思路 AC代码 后言 题目 正整数序列 思路 其实这是一个数学题目..并不需要使用递归求解. 其实在数学中每个数都能表示成2的幂总和 比如 127=20+21+22+23+24+25+ ...
最新文章
- Exception loading sessions from persistent storage
- shell实例第4讲:批量创建用户
- js中当等于最小值是让代码不执行_JavaScript中最最基础的知识点
- WPF 四种不同效果呼吸灯
- 时间小知识对于时间转换可能有帮助
- 山寨版项目管理经验小结
- Docker学习总结(48)——Docker 四种网络模式温故
- 使用C#调用外部序或是执行DOS命令
- 简单易懂实例说明如何设计子网掩码
- 空间查询时出错误 An expected Field was not found or could not be retrieved properly. [SHAPE.AREA] 问题的解决...
- 使用eeupdate修改机器网卡mac地址
- matplotlib-27 内嵌环形饼图
- 谷歌浏览器的视频下载插件推荐
- iOS苹果开发者账号(公司账号)申请流程详解
- teamviewer Android 8,利用TeamViewer控制设备
- 课程学习与自步学习Curriculum learning and self-paced learning:极简入门
- 老兵新传 Visual Basic核心编程及通用模块开发pdf
- esp8266 wifi信号强度示意表
- 时态的重建--适合理工直男的钟平老师逻辑英语学习笔记
- ApacheCN Python 译文集(二)20211110 更新
热门文章
- 【转】sip中的subscribe和notify扩展应用技术
- JS组件系列——Bootstrap 树控件使用经验分享 - 懒得安分 - 博客园
- es6 --- 使用生成器交替执行
- JavaScript --- 表单focus,blur,change事件的实现
- 01 React初步认知、React元素、渲染、工程化
- 395. Longest Substring with At Least K Repeating Characters
- iOS显示性能优化过程讲解
- 教你如何在 elasticsearch 中重建索引
- 分配的访问权限的展台应用:最佳做法
- 3.过滤数据 ---SQL