【线段树】Bzoj1798 [AHOI2009] 维护序列
Description
Input
Output
Sample Input
1 2 3 4 5 6 7
5
1 2 5 5
3 2 4
2 3 7 9
3 1 3
3 4 7
Sample Output
35
8
题解
三个数组sum, mul, add,具体操作看代码
要注意前面操作对当前的影响,及时pushback,统计祖先add&mul也要想清
以后做这种题目都要想清定义,每一步的影响,不然就都乱了
以后要自己想清造小数据过了后再去搞大数据拍,自己造的数据密度大很多的,而且先要保证正确性才行
代码
非常不愉快,打完后找标程对拍,大数据不一样,调了好久,结果是标程有问题QwQ
以后全部用ll保平安啦
#include<cstdio>
#define ll long long
const int maxn=4e5+; ll sumv[maxn],mulv[maxn],addv[maxn];
ll N,M,mod,p,q,w,x; void pushup(ll o,ll l,ll r){
sumv[o]=;
if(l<r) sumv[o]=sumv[o*]+sumv[o*+];
sumv[o]*=mulv[o],sumv[o]%=mod;
sumv[o]+=(r-l+)*addv[o],sumv[o]%=mod;
} void pushdown(ll o,ll l,ll r){
ll Mul=mulv[o],Add=addv[o],lc=o*,rc=o*+,mid=(l+r)>>;
sumv[lc]=(sumv[lc]*Mul+(mid-l+)*Add)%mod;
sumv[rc]=(sumv[rc]*Mul+(r-mid)*Add)%mod;
mulv[lc]=(mulv[lc]*Mul)%mod;
mulv[rc]=(mulv[rc]*Mul)%mod;
addv[lc]=(addv[lc]*Mul+Add)%mod;
addv[rc]=(addv[rc]*Mul+Add)%mod;
mulv[o]=;addv[o]=;
} void add(ll o,ll l,ll r){
if(p<=l&&q>=r) addv[o]+=w,addv[o]%=mod;
else{
pushdown(o,l,r);
int mid=(l+r)/;
if(p<=mid) add(o*,l,mid);
if(q>mid) add(o*+,mid+,r);
}
pushup(o,l,r);
} void mul(ll o,ll l,ll r){
if(p<=l&&q>=r){
mulv[o]*=w,mulv[o]%=mod;
addv[o]*=w,addv[o]%=mod;
}
else{
pushdown(o,l,r);
int mid=(l+r)/;
if(p<=mid) mul(o*,l,mid);
if(q>mid) mul(o*+,mid+,r);
}
pushup(o,l,r);
} ll ret;
void sum(ll o,ll l,ll r,ll Add,ll Mul){
if(p<=l&&q>=r){
ret+=Mul*sumv[o]+Add*(r-l+);
ret%=mod;
}
else{
int mid=(l+r)/;
if(p<=mid) sum(o*,l,mid,(Add+Mul*addv[o])%mod,Mul*mulv[o]%mod);
if(q>mid) sum(o*+,mid+,r,(Add+Mul*addv[o])%mod,Mul*mulv[o]%mod);
}
} int main(){
scanf("%lld%lld",&N,&mod);
for(int i=;i<=*N;i++) mulv[i]=; for(int i=;i<=N;i++){
scanf("%lld",&w);
p=q=i;
add(,,N);
} scanf("%lld",&M);
for(int i=;i<=M;i++){
scanf("%lld",&x);
if(x==){
scanf("%lld%lld%lld",&p,&q,&w);
mul(,,N);
}
else if(x==){
scanf("%lld%lld%lld",&p,&q,&w);
add(,,N);
}
else{
scanf("%lld%lld",&p,&q);
ret=;
sum(,,N,,);
printf("%lld\n",ret);
continue;
}
} return ;
}
【线段树】Bzoj1798 [AHOI2009] 维护序列的更多相关文章
- BZOJ1798[Ahoi2009]维护序列——线段树
题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...
- bzoj1798 [Ahoi2009]维护序列
Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...
- BZOJ_1798_[AHOI2009]维护序列_线段树
BZOJ_1798_[AHOI2009]维护序列_线段树 题意:老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: ( ...
- 洛谷P3373 【模板】线段树 2 && P2023 [AHOI2009]维护序列——题解
题目传送: P3373 [模板]线段树 2 P2023 [AHOI2009]维护序列 该题较传统线段树模板相比多了一个区间乘的操作.一提到线段树的区间维护问题,就自然想到了“懒标记”:为了降低时间复 ...
- P2023 [AHOI2009]维护序列 题解(线段树)
题目链接 P2023 [AHOI2009]维护序列 解题思路 线段树板子.不难,但是...有坑.坑有多深?一页\(WA\). 由于乘法可能乘\(k=0\),我这种做法可能会使结果产生负数.于是就有了这 ...
- 洛谷P2023 [AHOI2009]维护序列(线段树区间更新,区间查询)
洛谷P2023 [AHOI2009]维护序列 区间修改 当我们要修改一个区间时,要保证 \(ax+b\) 的形式,即先乘后加的形式.当将区间乘以一个数 \(k\) 时,原来的区间和为 \(ax+b\) ...
- [Luogu 2023] AHOI2009 维护序列
[Luogu 2023] AHOI2009 维护序列 恕我冒昧这和线段树模板二有个琴梨区别? #include <cstdio> int n,m; long long p; class S ...
- 洛谷 2023 [AHOI2009]维护序列
洛谷 2023 [AHOI2009]维护序列 洛谷原题传送门 这个题也是一道经典的线段树模版(其实洛谷的模版二改一下输入顺序就能AC),其中包括区间乘法修改.区间加法修改.区间查询三个操作. 线段树的 ...
- 洛谷 P2023 [AHOI2009]维护序列 题解
P2023 [AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中 ...
随机推荐
- OpenNMS安装手册
一. 系统需求Windows Server 2008 R2 SP1 64位JDK 8 update 5 for Windows 64位PostgreSQL 9.3.5 for Windows 64位O ...
- sort list(给链表排序)
Sort a linked list in O(n log n) time using constant space complexity. 题目要求使用O(nlogn)时间复杂度,可以考虑使用归并排 ...
- JVM内存详解-阅读笔记
- access treeview读取数据表成树并与子窗体联动
Private Sub Form_Load()Dim i As IntegerDim rst As DAO.RecordsetSet rst = CurrentDb.OpenRecordset(&qu ...
- python---面向对象高级进阶
静态方法,调用静态方法后,该方法将无法访问类变量和实例变量 class Dog(object): def __init__(self,name): self.name = name def eat(s ...
- Java 故障安全异常处理
异常处理代码必须保证其故障安全机制,其中一条重要的规则如下: 在try-catch-finally块抛出的最后一个异常将会在调用堆栈中传递. 所有早期异常将会消失. 如果从一个catch或finall ...
- PHP代码审计
Preface 这篇文章的内容会不断的充实和丰富,前期会增加一些之前爆出漏洞的复现过程,来丰富自己实际代码审计经验,后期如果能挖掘出新的漏洞,便更好. 代码审计之SQL注入:BlueCMSv1.6 s ...
- Spark核心编程---创建RDD
创建RDD: 1:使用程序中的集合创建RDD,主要用于进行测试,可以在实际部署到集群运行之前,自己使用集合构造测试数据,来测试后面的spark应用流程. 2:使用本地文件创建RDD,主要用于临时性地处 ...
- java之jsp页面语法
jsp页面相比静态页面html来说,就是多了一些脚本,利用这些脚本来动态地改变页面内容的显示. 1.JSP脚本写法 <% 这里写java代码; %> <%! JSP声明,用来声明变量 ...
- win10更新失败——适用于Windows 10 Version 1709 的03累积更新,适合基于x64系统(KB4088776)更新失败
相信最近很多人被windows的更新折磨坏了,下面来介绍一下解决办法,有用的话请点赞! 首先将C盘中的这个文件夹删除:"C:\Windows\System32\Tasks\Microsoft ...