题目链接

暴力数据结构之线段树$qwq$

裸题直接敲板子

忘了啥时候写的了$qwq$

直接上代码吧

/**************************************************************
Problem: 1798
User: zhangheran
Language: C++
Result: Accepted
Time:6372 ms
Memory:10688 kb
****************************************************************/ #include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int n;
int m;
long long mod;
struct lt
{
long long val[];
long long lazy[];
long long lazzy[];
inline void update(int p,int l,int r)
{
val[p]*=lazzy[p];
val[p]%=mod;
val[p]+=lazy[p]*(r-l);
val[p]%=mod;
return;
}
inline void pushdown(int p,int l,int r)
{
update(p,l,r);
if(r-l>)
{
lazy[*p]*=lazzy[p];
lazy[*p]+=lazy[p];
lazy[*p]%=mod;
lazzy[*p]*=lazzy[p];
lazzy[*p]%=mod;
lazy[*p+]*=lazzy[p];
lazy[*p+]+=lazy[p];
lazy[*p+]%=mod;
lazzy[*p+]*=lazzy[p];
lazzy[*p+]%=mod;
}lazy[p]=;
lazzy[p]=;
return;
}
ll build(int p,int l,int r)
{
lazzy[p]=;
if(r-l==)
{
scanf("%lld",&val[p]);
val[p]%=mod;
return val[p];
}
int mid=(l+r)/;
if(mid>l)val[p]+=build(*p,l,mid);
if(mid<r)val[p]+=build(*p+,mid,r);
val[p]%=mod;
return val[p];
}
void setplus(int p,int l,int r,int dl,int dr,long long plus)
{
if(lazy[p]!=||lazzy[p]!=) pushdown(p,l,r);
if(l==dl&&r==dr)
{
lazy[p]+=plus;
lazy[p]%=mod;
pushdown(p,l,r);
return;
}
int mid=(l+r)/;
if(mid>dl) setplus(*p,l,mid,dl,min(mid,dr),plus);
else pushdown(*p,l,mid);
if(mid<dr) setplus(*p+,mid,r,max(mid,dl),dr,plus);
else pushdown(*p+,mid,r);
val[p]=(val[*p]+val[*p+])%mod;
return;
}
void setmult(int p,int l,int r,int dl,int dr,long long mult)
{
if(lazzy[p]!=||lazy[p]!=)pushdown(p,l,r);
if(l==dl&&r==dr)
{
lazy[p]*=mult;
lazzy[p]*=mult;
lazy[p]%=mod;
lazzy[p]%=mod;
pushdown(p,l,r);
return;
}
int mid=(l+r)/;
if(mid>dl) setmult(*p,l,mid,dl,min(mid,dr),mult);
else pushdown(*p,l,mid);
if(mid<dr)setmult(*p+,mid,r,max(mid,dl),dr,mult);
else pushdown(*p+,mid,r);
val[p]=(val[*p]+val[*p+])%mod;
return;
}
ll sum(int p,int l,int r,int dl,int dr)
{
if(lazy[p]!=||lazzy[p]!=) pushdown(p,l,r);
if(l==dl&&r==dr) return val[p];
int mid=(l+r)/;
ll res=;
if(mid>dl) res+=sum(*p,l,mid,dl,min(mid,dr));
if(mid<dr) res+=sum(*p+,mid,r,max(mid,dl),dr);
res%=mod;
return res;
}
}lt;
int main()
{
scanf("%d%d",&n,&mod);
lt.build(,,n);scanf("%d",&m);
for(int i=;i<=m;i++)
{
int opt,u,v;
scanf("%d%d%d",&opt,&u,&v);
if(opt==)
{
int t;
scanf("%d",&t);
lt.setmult(,,n,u-,v,t);
}
else if(opt==)
{
int t;
scanf("%d",&t);
lt.setplus(,,n,u-,v,t);
}
else if(opt==)
printf("%lld\n",lt.sum(,,n,u-,v));
}
return ;
}

bzoj1798维护序列的更多相关文章

  1. BZOJ1798 维护序列seq

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 8058  Solved: 2964[Submit ...

  2. 【双标记线段树】bzoj1798维护序列seq

    一.题目 描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列 ...

  3. bzoj1798 维护序列

    Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...

  4. p2023&bzoj1798 维护序列

    传送门(洛谷) 传送门(bzoj) 题目 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全 ...

  5. BZOJ-1798 维护序列

    线段树.支持区间加.区间乘.区间查询和. 标记下移还有取模要注意. var n,p,q,i,s,t:longint; a:int64; num,n1,n2,n3:array[0..500000] of ...

  6. BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 5504  Solved: 1937[Submit ...

  7. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

  8. bzoj 维护序列seq(双标记线段树)

    Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 4184  Solved: 1518[Submit][Status][Discus ...

  9. BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )

    线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...

随机推荐

  1. 2014.9.30 Double转字符

    (57.0/60.0).ToString("f2")="0.95" 等于 string.Format("{0:F2}",57.0/60)=& ...

  2. 优化深度神经网络(三)Batch Normalization

    Coursera吴恩达<优化深度神经网络>课程笔记(3)-- 超参数调试.Batch正则化和编程框架 1. Tuning Process 深度神经网络需要调试的超参数(Hyperparam ...

  3. DIV+CSS+JS实现图片<ul><li></li></ul>无缝滚动代码

    (含上下左右滚动代码) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  4. div+css 左右两列自适应高度 ,以及父级div也跟着自适应子级的高度(兼容各大浏览器)

    <style type="text/css" media="screen"> <!-- #main {width:500px;_height: ...

  5. 微信小程序wxss设置样式

    微信小程序wxss设置样式 对于以前搞客户端开发的来说,有着客户端的逻辑,就是不知道怎么设置样式,把对应的控件显示出来 一.wxml 界面结构wxmL比较容易理解,主要是由八大类基础组件构成: 一.视 ...

  6. 微信开发准备(四)--nat123内网地址公网映射实现

    转自:http://www.cuiyongzhi.com/post/37.html 在前面几篇中我们一直说的开发准备工作主要是基于开发框架上的,这里我们说的就逐渐接近开发过程中的实体操作了,如果你之前 ...

  7. ATL向控件添加私有属性-成员变量

    https://msdn.microsoft.com/zh-cn/library/cc451389(v=vs.71).aspx ------------------------------------ ...

  8. Python基础学习五 内置函数

    1.函数补充: 1)函数返回值return可以有多个 2)补充示例: nums = [0,1,2,3,4,5,6,7,8] #如何将list里面的元素变为字符串类型 new_nums = [str(x ...

  9. InputStreamReader和BufferedReader的区别

    .InputStream.OutputStream 处理字节流的抽象类 InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等. OutputSt ...

  10. 【bzoj1018】[SHOI2008]堵塞的交通traffic

    1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2887  Solved: 954[Submit ...