【luogu P2023 [AHOI2009]维护序列】 题解
题目链接:https://www.luogu.org/problemnew/show/P2023
把P3373改一改直接粘过来就A
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define lson left, mid, rt<<1
#define rson mid+1, right, rt<<1|1
#define ll long long
using namespace std;
const int maxn = ;
ll n, m, addlazy[maxn<<], mullazy[maxn<<], ans[maxn<<], mod, x,y,k;
void PushUP(ll rt)
{
ans[rt] = (ans[rt<<] + ans[rt<<|])%mod;
}
void build(ll left, ll right, ll rt)
{
addlazy[rt] = ;
mullazy[rt] = ;
if(right == left)
{
scanf("%d",&ans[rt]);
return ;
}
ll mid = (left+right) >> ;
build(lson);
build(rson);
PushUP(rt);
}
void PushDOWN(ll rt, ll mid, ll left, ll right)
{
mullazy[rt<<]=(mullazy[rt<<]*mullazy[rt])%mod;
mullazy[rt<<|]=(mullazy[rt<<|]*mullazy[rt])%mod;
addlazy[rt<<]=(addlazy[rt<<]*mullazy[rt])%mod;
addlazy[rt<<|]=(addlazy[rt<<|]*mullazy[rt])%mod;
ans[rt<<]=(ans[rt<<]*mullazy[rt])%mod;
ans[rt<<|]=(ans[rt<<|]*mullazy[rt])%mod;
mullazy[rt]=;
addlazy[rt<<]=(addlazy[rt<<]+addlazy[rt])%mod;
addlazy[rt<<|]=(addlazy[rt<<|]+addlazy[rt])%mod;
ans[rt<<]=(ans[rt<<]+(mid-left+)*addlazy[rt])%mod;
ans[rt<<|]=(ans[rt<<|]+(right-mid)*addlazy[rt])%mod;
addlazy[rt]=;
}
void mulupdate(ll l, ll r, ll add, ll left, ll right, ll rt)
{
if(l<=left&&r>=right)
{
addlazy[rt] = (addlazy[rt]*add)%mod;
mullazy[rt] = (mullazy[rt]*add)%mod;
ans[rt] = (add*ans[rt])%mod;
return;
}
ll mid = (left+right)>>;
if(mullazy[rt]!=||addlazy[rt]>=) PushDOWN(rt,mid,left,right);
if(l<=mid) mulupdate(l,r,add,lson);
if(r>mid) mulupdate(l,r,add,rson);
PushUP(rt);
}
void addupdate(ll l, ll r, ll add, ll left, ll right, ll rt)
{
if(l<=left&&r>=right)
{
addlazy[rt]= (addlazy[rt]+add)%mod;
ans[rt] = (ans[rt] + add*(right-left+))%mod;
return;
}
ll mid = (left+right)>>;
if(mullazy[rt]!=||addlazy[rt]>=) PushDOWN(rt,mid,left,right);
if(l<=mid) addupdate(l,r,add,lson);
if(r>mid) addupdate(l,r,add,rson);
PushUP(rt);
}
ll query(ll l, ll r, ll left, ll right, ll rt)
{
ll res = ;
if(l <= left&&r >= right) return ans[rt]%mod;
ll mid = (left+right) >> ;
if(mullazy[rt]!=||addlazy[rt]>=) PushDOWN(rt, mid, left, right);
if(l <= mid) res = (res+query(l,r,lson))%mod;
if(r > mid) res = (res+query(l,r,rson))%mod;
return res%mod;
}
int main()
{
scanf("%d%d",&n,&mod);
build(,n,);
scanf("%d",&m);
while(m--)
{
int p;
scanf("%d",&p);
if(p == )
{
scanf("%d%d%d",&x,&y,&k);
mulupdate(x,y,k,,n,);
}
if(p == )
{
scanf("%d%d%d",&x,&y,&k);
addupdate(x,y,k,,n,);
}
if(p == )
{
scanf("%d%d",&x,&y);
printf("%d\n",query(x,y,,n,));
}
}
return ;
}
【luogu P2023 [AHOI2009]维护序列】 题解的更多相关文章
- P2023 [AHOI2009]维护序列 题解(线段树)
题目链接 P2023 [AHOI2009]维护序列 解题思路 线段树板子.不难,但是...有坑.坑有多深?一页\(WA\). 由于乘法可能乘\(k=0\),我这种做法可能会使结果产生负数.于是就有了这 ...
- 洛谷 P2023 [AHOI2009]维护序列 题解
P2023 [AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中 ...
- 洛谷P3373 【模板】线段树 2 && P2023 [AHOI2009]维护序列——题解
题目传送: P3373 [模板]线段树 2 P2023 [AHOI2009]维护序列 该题较传统线段树模板相比多了一个区间乘的操作.一提到线段树的区间维护问题,就自然想到了“懒标记”:为了降低时间复 ...
- [Luogu 2023] AHOI2009 维护序列
[Luogu 2023] AHOI2009 维护序列 恕我冒昧这和线段树模板二有个琴梨区别? #include <cstdio> int n,m; long long p; class S ...
- 洛谷 P2023 [AHOI2009]维护序列
P2023 [AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中 ...
- 洛谷P2023 [AHOI2009]维护序列(线段树区间更新,区间查询)
洛谷P2023 [AHOI2009]维护序列 区间修改 当我们要修改一个区间时,要保证 \(ax+b\) 的形式,即先乘后加的形式.当将区间乘以一个数 \(k\) 时,原来的区间和为 \(ax+b\) ...
- [洛谷P2023] [AHOI2009]维护序列
洛谷题目链接:[AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列 ...
- 【题解】洛谷P2023 [AHOI2009] 维护序列(线段树)
洛谷P2023:https://www.luogu.org/problemnew/show/P2023 思路 需要2个Lazy-Tag 一个表示加的 一个表示乘的 需要先计算乘法 再计算加法 来自你谷 ...
- [P2023][AHOI2009]维护序列(线段树)
题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一 ...
随机推荐
- 现学现卖】IntelliJ+EmmyLua 开发调试Unity中Xlua
http://blog.csdn.net/u010019717/article/details/77510066?ref=myread http://blog.csdn.NET/u010019717 ...
- 并列 inline-block 元素互相影响问题
今天在做页面时发现一个很奇怪的问题:当两个设置了display: inline-block; 属性的元素并列排放时,它们的位置能够互相影响. 我们先来看看元素结构: <div class=&qu ...
- URAL ——1249——————【想法题】
Ancient Necropolis Time Limit:5000MS Memory Limit:4096KB 64bit IO Format:%I64d & %I64u ...
- hdu 5242——Game——————【树链剖分思想】
Game Time Limit:1500MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- BNU7538——Clickomania——————【区间dp】
Clickomania Time Limit: 10000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d Java clas ...
- NPOI之C#下载Excel
Java中这个类库叫POI,C#中叫NPOI,很多从Java一直到.Net平台的类库为了区别大部分都是在前面加个N,比如Hibernate和NHibernate. npoi下载地址 一.使用NPOI下 ...
- Spring JdbcTemplate 使用总结
1.查询Object public Classify queryClassifById(int id){ String sql="select * from t_classify where ...
- /Date(1410019200000+0800)/如何转换为date对象
<script type="text/javascript">var s = '/Date(1410019200000+0800)/ '; s.replace(/Dat ...
- select支持多查询,获取分页count
在我们使用mybatis 时,当我们根据分页去查询数据集时,需要传入的参数有page(页码)和size(每页的条数),而我们期望获取到的数据有,小于或等于size的list数据集,同时我们还需要得到一 ...
- HTML表单特别效果—音量调节,购物数量
<form oninput="x.value=parseInt(a.value)+parseInt(b.value)">0<input type="ra ...