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的值. ...
随机推荐
- ffmpeg使用笔记
1.从mp4中提取h264:ffmpeg -i 264.mp4 -codec copy -bsf h264_mp4toannexb -f h264 output.h2642.从mp4中提取hevc:f ...
- TreeMap与LinkedHashMap的区别
TreeMap是根据元素的内部比较器进行排序的,它可以根据key值的大小排序: LinkedHashMap是保持存放顺序的. TreeMap采用红黑树算法,遍历效率高: LinkedHashMap采用 ...
- python 字符串输入、输出函数print input raw_input
一.输出print print输出是以不带引号的输出.(用户所见的输出) 二.input() 和 raw_input()输入函数 raw_input()会把输入数据转换成字符串形式: ------ ...
- 集成activiti到现有项目中
1.在lib中添加相关的jar包 2.找到一个activiti.cfg.xml,若是想用现有的数据库需要配置 <?xml version="1.0" encoding=&qu ...
- uwsgi配置文件
[uwsgi] http = :9000 #the local unix socket file than commnuincate to Nginx #socket端口这个用作nginx与其通讯 s ...
- MyEclipse10安装checkStyle与findBugs插件--详细完美结局-费元星
本人QQ:971751392(屌丝一枚) Myeclipse10安装checkStyle与findBugs插件详细完美结局方案: 资源一: http://download.csdn.net/detai ...
- centos7下安装oracle11gR2的详细步骤
环境准备 安装包: CentOS-7-x86_64-DVD linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip 本教 ...
- Clean Code 《代码整洁之道》前四章读书笔记
第一章: 整洁的代码只做好一件事 减少重复代码 提高表达力 提早构建简单抽象 让营地比你来时更干净 第二章:有意义的命名 名副其实:如果名称需要注释来补充,就不算是名副其实. ...
- ASP NET Core ---POST, PUT, PATCH, DELETE,Model 验证
参照 草根专栏- ASP.NET Core + Ng6 实战:https://v.qq.com/x/page/u0765jbwc6f.html 一.POST 安全性和幂等性 安全性是指方法执行后并不会 ...
- kubernetes(k8s) 集群
开启和重启命令: sudo systemctl stop etcdsudo systemctl stop dockersudo systemctl stop kube-apiserversudo sy ...