题目链接

暴力数据结构之线段树$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. Node.js实用知识点

    本文介绍如何使用nodejs 简单的HttpServer 调试nodejs 基础路由 nodejs配置开发和生产环境 nodejs核心模块一览 express用法 文件I/O nodejs模块 nod ...

  2. Flask之RESTful

    5.4 Restful 2000年,Roy Thomas Fielding博士在他的博士论文<Architectural Styles and the Design of Network-bas ...

  3. 关于linux创建用户的有趣事情!

    小博主今天接受了一项光荣的任务!为什么说是光荣任务呢?因为这个任务是需要创建一个linux用户!!! 肯定有小伙伴要嘲笑了!创建一个用户有什么难的啊! 对!这个并不难,即使是小白也能轻松应对! 但是! ...

  4. spring中aop原理

  5. sql语句查询中exists中为什么要用select 1?

    select * from call_cdr_xz_200609 a where and a.ori_charge<>0 and exists(select 1 from special ...

  6. opennebule 创建cdrom数据发送

    {","csrftoken":"b9b5026f1a92180b789971ed8e21d28b"}

  7. 15.select into

    select into SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档. CREATE TABLE ...

  8. Luogu 4155 [SCOI2015]国旗计划

    BZOJ 4444 倍增 + 贪心. 发现是一个环,先按照套路把环断开复制一倍,这样子的话覆盖完整个环就相当于覆盖一条长度不小于$m$的链,注意这样子有一些区间在新的这条链上会出现两次. 我们为了找到 ...

  9. python之连接oracle数据库

    环境: windows,python2.7 1.下载cx_Oracle 在windows下不要使用easy_install或者pip,因为这样安装不会同步环境,并报错: distutils.error ...

  10. 2.Books

    Books示例说明了Qt中SQL类如何被Model/View框架使用,使用数据库中存储的信息,创建丰富的用户界面. 首先介绍使用SQL我们需要了解的类: 1.QSqlDatabase: QSqlDat ...