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的值. ...
随机推荐
- 675. Cut Off Trees for Golf Event
// Potential improvements: // 1. we can use vector<int> { h, x, y } to replace Element, sortin ...
- 数字滤波器的MATLAB与FPGA实现--Altera/Verilog版的pdf版,杜勇等编著的书。
自己在网上找了很久才找到的资源,花了很大的劲,觉得不易,特地分享给大家.本书讲了使用FPGA的Fir IIR IP核与Matlab配合使用生成滤波器的详细使用方法.贴出地址,http://downlo ...
- springMVC3
复习: springmvc框架: DispatcherServlet前端控制器:接收request,进行response HandlerMapping处理器映射器:根据url查找Handler.(可以 ...
- [Cracking the Coding Interview] 4.3 List of Depths
Given a binary tree, design an algorithm which creates a linked list of all the nodes at each depth. ...
- python2.7练习小例子(十四)
14):题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. 程序分析:程序分析:(a>b)?a:b这 ...
- Java线程和多线程(九)——死锁
Java中的死锁指的就是一种多于两个线程永远阻塞的特殊状况.Java中的死锁状态至少需要多于两个线程以及资源的时候才会产生.这里,我写了一个产生死锁的程序,并且讲下如何分析死锁. 首先来看一下产生死锁 ...
- 1176: [Balkan2007]Mokia
1176: [Balkan2007]Mokia 链接 分析 三维偏序问题,CDQ分治论文题. 代码 #include<bits/stdc++.h> using namespace std; ...
- springmvc基础篇—处理图片静态资源文件
当我们在web.xml中对DispatcherServlet的过滤设置为/ 的时候,表示对所有的路径进行拦截过滤,那么不可避免的就会产生一个问题,那就是像图片这种静态资源文件我明明引用路径有,但就是加 ...
- jquery框架一点小心得
下面的小事例 主要实现了 一和按ID查找,并获取元素的 value 或 标签内容和一个去字符串空格的小功能能 假设元素id=“myid”: 获取标签内容$("myid").html ...
- Annoy解析
Annoy是高维空间求近似最近邻的一个开源库. Annoy构建一棵二叉树,查询时间为O(logn). Annoy通过随机挑选两个点,并使用垂直于这个点的等距离超平面将集合划分为两部分. 如图所示,图中 ...