BZOJ1798 维护序列seq
1798: [Ahoi2009]Seq 维护序列seq
Time Limit: 30 Sec Memory Limit: 64 MB
Submit: 8058 Solved: 2964
[Submit][Status][Discuss]
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
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn = 8e5+;
long long mod;
long long n,m;
struct segtree{
#define lc(x) (x*2)
#define rc(x) (x*2+1)
long long l[maxn],r[maxn];
long long sumi[maxn],mul[maxn],add[maxn];
void build(int x,int L,int R){
//数组从1开始
l[x]=L;
r[x]=R;
add[x]=;
mul[x]=;
if(L==R){
//区间节点
cin>>sumi[x];
return;
}
int mid=(L+R)/;
build(lc(x),L,mid);
build(rc(x),mid+,R);
update(x);
}
void update(int x){
sumi[x]=(sumi[lc(x)]+sumi[rc(x)])%mod;
}
void push(int x){
mul[lc(x)]=(mul[lc(x)]*mul[x])%mod;
mul[rc(x)]=(mul[rc(x)]*mul[x])%mod;
add[lc(x)]=(add[lc(x)]*mul[x]+add[x])%mod;
add[rc(x)]=(add[rc(x)]*mul[x]+add[x])%mod;
sumi[lc(x)]=(sumi[lc(x)]*mul[x]+
add[x]*(r[lc(x)]-l[lc(x)]+))%mod;
sumi[rc(x)]=(sumi[rc(x)]*mul[x]+
add[x]*(r[rc(x)]-l[rc(x)]+))%mod;
add[x]=;
mul[x]=;
}
void ADD(int x,int L,int R,long long v){
push(x);
if(R<l[x]||L>r[x]) return; //查询区间不在范围内
if(L<=l[x]&&r[x]<=R){
sumi[x]=(sumi[x]+v*(r[x]-l[x]+))%mod;
add[x]=(add[x]+v)%mod;
return;
}
ADD(lc(x),L,R,v);
ADD(rc(x),L,R,v);
update(x);
}
void MUL(int x,int L,int R,long long v){
push(x);
if(R<l[x]||L>r[x]) return;
if(L<=l[x]&&r[x]<=R){
sumi[x]=(sumi[x]*v)%mod;
add[x]=(add[x]*v)%mod;
mul[x]=(mul[x]*v)%mod;
return;
}
MUL(lc(x),L,R,v);
MUL(rc(x),L,R,v);
update(x);
}
long long Qsum(int x,int L,int R){
push(x);
if(l[x]>R||r[x]<L) return ;
if(L<=l[x]&&r[x]<=R) return sumi[x];
return (Qsum(lc(x),L,R)+Qsum(rc(x),L,R))%mod;
}
}seg; int main(){
cin>>n>>mod;
seg.build(,,n);
cin>>m;
for(long long i= ,op,l,r;i<=m;i++){
cin>>op>>l>>r;
if(op==) {
cout<<seg.Qsum(,l,r)<<endl;
}
else{
long long v;
cin>>v;
if(op==) seg.MUL(,l,r,v);
else seg.ADD(,l,r,v);
}
}
return ;
}
BZOJ1798 维护序列seq的更多相关文章
- 【双标记线段树】bzoj1798维护序列seq
一.题目 描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列 ...
- BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 5504 Solved: 1937[Submit ...
- bzoj 维护序列seq(双标记线段树)
Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 4184 Solved: 1518[Submit][Status][Discus ...
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )
线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...
- 1798: [Ahoi2009]Seq 维护序列seq
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 2930 Solved: 1087[Submit ...
- bzoj 1798: [Ahoi2009]Seq 维护序列seq (线段树 ,多重标记下放)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 7773 Solved: 2792[Submit ...
- bzoj 1798: [Ahoi2009]Seq 维护序列seq 线段树 区间乘法区间加法 区间求和
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeO ...
- Bzoj 1798: [Ahoi2009]Seq 维护序列seq(线段树区间操作)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小可 ...
- BZOJ1798[Ahoi2009]Seq 维护序列seq 题解
题目大意: 有长为N的数列,有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一段数全部加一个值; (3)询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模P的值. ...
随机推荐
- ABAP CDS ON HANA-(1)CDSビュー作成
Basic CDS View Creation Open HANA Studio. Goto ABAP perspective. Open the project, Navigate to the p ...
- 6.JAVA知识点归纳整理
一.jdk初识与HelloWord: 二.java基础: 2.1 标识符_关键字_数据类型 2.2 数据类型转换 2.3 程序编写格式 2.4 运算符 2.5 分支与for循环 2.6 while_b ...
- shell eval命令使用
eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令. 该命令适用于那些一次扫描无法实现其功能的变量.该命令对变量进行两次扫描. 这些需要进行两次扫描的变量有时被称为复杂变量.不过这些变量本 ...
- ORB-SLAM (四)tracking跟踪解析
初始化完成后,对于相机获取当前图像mCurrentFrame,通过跟踪匹配上一帧mLastFrame特征点的方式,可以获取一个相机位姿的初始值:为了兼顾计算量和跟踪鲁棒性,处理了三种模型: 1. Tr ...
- 区分Oracle的数据库,实例,服务名,SID
文章摘自:http://www.zhetao.com/content240 感谢分享O(∩_∩)O~ 在实际的开发应用中,关于Oracle数据库,经常听见有人说建立一个数据库,建立一个Instance ...
- os模块3
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curd ...
- Bug是一种财富-------研发同学的错题集、测试同学的遗漏用例集
此文已由作者王晓明授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 各位看官,可能看到标题的你一定认为这是一篇涉嫌"炒作"的文章,亦或是为了吸引眼球而起的标 ...
- PostgreSQL 数据库升级
PostgreSQL软件版本升级后,需要使用pg_upgrade迁移旧版本的数据库,具体的操作参数可以参考官方文档,在此记录一下操作过程中出现的细节问题: 新版本软件在initdb的时候要保证loca ...
- hadoop与mysql数据库的那点事
转眼间已经接触了hadoop两周了,从之前的极力排斥到如今的有点喜欢,刚开始被搭建hadoop开发环境搞得几乎要放弃,如今学会了编写小程序,每天都在成长一点挺好的,好好努力,为自己的装备库再填 ...
- 项目总结(一)->项目的七宗罪
大半夜来这一份总结,心中夹杂着各种各样的心情,酸甜苦辣都有,今天为止,整个项目终于完结了,对于这样一个本可以正而八经吃吃薯片,看看毛片就可以完成项目,最后演变成一个一月之内连续加班105个小时的项目, ...