ahoi2009维护序列
链接:https://www.luogu.org/problemnew/show/P2023
裸的线段树维护+*
代码:
#include <bits/stdc++.h>
using namespace std;
#define maxn 400010
#define mid (h+t)/2
#define ll long long
ll n,m,a[maxn],mo,c,d,e,lazy1[maxn],lazy2[maxn];
struct re
{
ll h,t,x;
}p[maxn];
void updata(ll x)
{
p[x].x=(p[x*].x+p[x*+].x)%mo;
}
void build(ll x,ll h,ll t)
{
p[x].h=h; p[x].t=t;
if (h==t)
{
p[x].x=a[h]; return;
}
build(x*,h,mid); build(x*+,mid+,t);
updata(x);
}
void down(ll x)
{
if (lazy2[x]!=)
{
p[x].x=(p[x].x*lazy2[x])%mo;
if (p[x].h!=p[x].t) //这一句效率有明显提高
{
lazy2[x*]=(lazy2[x*]*lazy2[x])%mo;
lazy2[x*+]=(lazy2[x*+]*lazy2[x])%mo;
lazy1[x*]=(lazy1[x*]*lazy2[x])%mo;
lazy1[x*+]=(lazy1[x*+]*lazy2[x])%mo;
}}
if (lazy1[x])
{
p[x].x=(p[x].x+lazy1[x]*(p[x].t-p[x].h+))%mo;
if (p[x].h!=p[x].t)
{
lazy1[x*]=(lazy1[x*]+lazy1[x])%mo;
lazy1[x*+]=(lazy1[x*+]+lazy1[x])%mo;
}}
lazy1[x]=; lazy2[x]=;
}
void change1(ll x,ll h,ll t,ll num)
{
down(x);
if (p[x].h>t||p[x].t<h) return;
if (h<=p[x].h&&p[x].t<=t)
{
lazy1[x]=(lazy1[x]+num)%mo;
down(x);
return;
}
change1(x*,h,t,num); change1(x*+,h,t,num);
updata(x);
}
void change2(ll x,ll h,ll t,ll num)
{
down(x);
if (p[x].h>t||p[x].t<h) return;
if (h<=p[x].h&&p[x].t<=t)
{
lazy1[x]=(lazy1[x]*num)%mo;
lazy2[x]=(lazy2[x]*num)%mo;
down(x);
return;
}
change2(x*,h,t,num); change2(x*+,h,t,num);
updata(x);
}
ll query(ll x,ll h,ll t)
{
down(x);
if (p[x].h>t||p[x].t<h) return();
if (h<=p[x].h&&p[x].t<=t) return(p[x].x);
return((query(x*,h,t)+query(x*+,h,t))%mo);
}
int main()
{
std::ios::sync_with_stdio(false);
cin>>n>>m>>mo;
for (ll i=;i<=n;i++) cin>>a[i];
for (int i=;i<=maxn-;i++) lazy2[i]=;
build(,,n);
for (ll i=;i<=m;i++)
{
int c,d,e,f;
cin>>c;
if (c==)
{
cin>>d>>e>>f;
change2(,d,e,f);
}
if (c==)
{
cin>>d>>e>>f;
change1(,d,e,f);
}
if (c==)
{
cin>>d>>e;
cout<<query(,d,e)%mo<<endl;
}
}
return ;
}
ahoi2009维护序列的更多相关文章
- BZOJ_1798_[AHOI2009]维护序列_线段树
BZOJ_1798_[AHOI2009]维护序列_线段树 题意:老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: ( ...
- [Luogu 2023] AHOI2009 维护序列
[Luogu 2023] AHOI2009 维护序列 恕我冒昧这和线段树模板二有个琴梨区别? #include <cstdio> int n,m; long long p; class S ...
- [洛谷P2023] [AHOI2009]维护序列
洛谷题目链接:[AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列 ...
- 洛谷 2023 [AHOI2009]维护序列
洛谷 2023 [AHOI2009]维护序列 洛谷原题传送门 这个题也是一道经典的线段树模版(其实洛谷的模版二改一下输入顺序就能AC),其中包括区间乘法修改.区间加法修改.区间查询三个操作. 线段树的 ...
- 洛谷 P2023 [AHOI2009]维护序列
P2023 [AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中 ...
- 洛谷 P2023 [AHOI2009]维护序列 题解
P2023 [AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中 ...
- 洛谷P2023 [AHOI2009]维护序列(线段树区间更新,区间查询)
洛谷P2023 [AHOI2009]维护序列 区间修改 当我们要修改一个区间时,要保证 \(ax+b\) 的形式,即先乘后加的形式.当将区间乘以一个数 \(k\) 时,原来的区间和为 \(ax+b\) ...
- 洛谷P3373 【模板】线段树 2 && P2023 [AHOI2009]维护序列——题解
题目传送: P3373 [模板]线段树 2 P2023 [AHOI2009]维护序列 该题较传统线段树模板相比多了一个区间乘的操作.一提到线段树的区间维护问题,就自然想到了“懒标记”:为了降低时间复 ...
- P2023 [AHOI2009]维护序列 题解(线段树)
题目链接 P2023 [AHOI2009]维护序列 解题思路 线段树板子.不难,但是...有坑.坑有多深?一页\(WA\). 由于乘法可能乘\(k=0\),我这种做法可能会使结果产生负数.于是就有了这 ...
- bzoj1798 [Ahoi2009]维护序列
Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...
随机推荐
- PHP7 学习笔记(三)关于PHP7如何安装调试工具Xdebug扩展以及Zephir的问题
前言: 1.自己摸索安装 2.快速安装 安装这个扩展是由于Zephir 编译不能始终通过,迫不得已啊,使用Zephir写扩展,总是出现以下错误: www@ubuntu1:~/phalcon-zephi ...
- Java实现DOS中的Copy命令
import java.io.*; import java.util.Scanner; public class fileCopy { public static void main(String [ ...
- JMS学习(七)-ActiveMQ消息的持久存储方式之KahaDB存储
一,介绍 自ActiveMQ5.4以来,KahaDB成为了ActiveMQ默认的持久化存储方式.相比于原来的AMQ存储方式,官方宣称KahaDB使用了更少的文件描述符,并且提供了更快的存储恢复机制. ...
- C#使用Font Awesome字体
这个类是一个开源类,我做了一些功能优化1.如果没有安装Font Awesome字体,可能需要直接去exe路径下使用对应名称字体.2.可以直接返回\uFxxx类型字体,方便winform按钮使用,不然的 ...
- 二、主目录 Makefile 分析(3)
2.8 编译选项 重新回到 主 makefile 中执行 2.8.1 u-boot 的编译顺序 代码166 到 189 行,这些是 u-boot 文件编译的顺序,由代码可以看到,首先是从cpu/$( ...
- 工控安全入门之Modbus(转载)
工控安全这个领域比较封闭,公开的资料很少.我在读<Hacking Exposed Industrial Control Systems>,一本16年的书,选了的部分章节进行翻译,以其抛砖引 ...
- [USACO]地震 (二分答案+最优比率生成树详解)
题面:[USACO 2001 OPEN]地震 题目描述: 一场地震把约翰家的牧场摧毁了, 坚强的约翰决心重建家园. 约翰已经重建了N个牧场,现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发 ...
- script标签中type为"text/x-template"或"text/html"
写过一点前端的都会碰到需要使用JS字符串拼接HTML元素然后append到页面DOM树上的情况,一般的写法都是使用+号以字符串的形式拼接,如果是短点的还好,如果很长很长的话就会拼接到令人崩溃了. 比如 ...
- 【Linux】VMware虚拟机中如何配置静态IP
此处详解如何在VMware虚拟机中配置静态IP. 上图是一个草图,大致说明下VMware网络情况.网段指某个IP范围,例如一栋小区楼和另一栋小区楼就不是一个网段 如果你在A小区,你女朋友在B小区,你想 ...
- 梯度优化算法总结以及solver及train.prototxt中相关参数解释
参考链接:http://sebastianruder.com/optimizing-gradient-descent/ 如果熟悉英文的话,强烈推荐阅读原文,毕竟翻译过程中因为个人理解有限,可能会有谬误 ...