【线段树】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)把数列中 ...
随机推荐
- 自动布局Autoresizing与Autolayout
一.关于iPhone屏幕的一些基本常识 1.ios屏幕适配的尺寸 iPhone的尺寸3.5inch.4.0inch.4.7inch.5.5inch iPad的尺寸7.9inch.9.7inch 2.点 ...
- 解决ecshop3.6 H5版本公告页面为空的修改办法
ecshop3.6公告页面打开如下,页面完全无效果,如下图. 经过简单美化后,有返回按钮,页面加以美化.如下图. 是不是要好看多了.简单修改几步即可. 修改文件 \appserver\resource ...
- valid sudoku(数独)
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- oracle 导入/导出遇到的 问题总结
0925: 解决oracle 11g空数据 exp 少表的问题 1:生成处理语句 Select 'alter table '||table_name||' allocate extent;' from ...
- 浅析跨域的方法之一 JSONP
概念: 什么叫跨域? 同源策略:它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略. 所谓同源是指,域名,协议,端口相同. 同源的脚本才会被执行 ...
- JAVA基础经典面试
[前言] 整理好久,这篇总结写的超级好,很全面.要全部背下来,至于框架应用那块,一定要有针对的,多写项目,照着慕课的对应项目. 链接:http://www.importnew.com/22083.ht ...
- JavaScript中将对象数组中的某个属性值,批量替换成另一个数值
原文链接 https://segmentfault.com/q/1010000010352622 希望将下列数组中的sh替换成沪,sz替换成深 var stooges = [ {label:1,val ...
- Spring Boot开发MongoDB应用实践
本文继续上一篇定时任务中提到的邮件服务,简单讲解Spring Boot中如何使用MongoDB进行应用开发. 上文中提到的这个简易邮件系统大致设计思路如下: 1.发送邮件支持同步和异步发送两种 2.邮 ...
- 各种代码版本控制工具下使用http代理的方法
原文:各种SCM工具下使用http代理下载源码:http://www.linuxeden.com/html/develop/20090723/66951.html SCM是软件配置管理的简称,常见的S ...
- Java 重入锁 ReentrantLock 原理分析
1.简介 可重入锁ReentrantLock自 JDK 1.5 被引入,功能上与synchronized关键字类似.所谓的可重入是指,线程可对同一把锁进行重复加锁,而不会被阻塞住,这样可避免死锁的产生 ...