做做bzoj上的新题(不存在的)

同bzoj1798: [Ahoi2009]维护序列,样例都一样的...我能想象到的唯一的新的考察意义就是模数是2e9不是1e9,于是加法的时候需要转long long

就是给出一段序列,zici区间加一个数,区间乘一个数,区间求和...线段树开两个标记a,b表示乘上a再加b,nlogn完事.

#include<cstdio>
const int maxn=100005;
int n,mod;
int seg[maxn<<2][3];//0:sum 1:multiply 2:plus
void build(int rt,int l,int r){
if(l==r){
scanf("%d",&seg[rt][0]);seg[rt][1]=1;seg[rt][2]=0;
}else{
int mid=(l+r)>>1;
build(rt<<1,l,mid);build(rt<<1|1,mid+1,r);
seg[rt][0]=(seg[rt<<1][0]+(long long)seg[rt<<1|1][0])%mod;
seg[rt][1]=1;seg[rt][2]=0;
}
}
void mult(int rt,int x){
seg[rt][0]=seg[rt][0]*1ll*x%mod;
seg[rt][1]=seg[rt][1]*1ll*x%mod;
seg[rt][2]=seg[rt][2]*1ll*x%mod;
}
void plus(int rt,int l,int r,int x){
seg[rt][0]=(seg[rt][0]+(r-l+1)*1ll*x)%mod;
seg[rt][2]=(seg[rt][2]+x)%mod;
}
void pushdown(int rt,int l,int r){
if(seg[rt][1]!=1){
mult(rt<<1,seg[rt][1]);mult(rt<<1|1,seg[rt][1]);
seg[rt][1]=1;
}
if(seg[rt][2]!=0){
int mid=(l+r)>>1;
plus(rt<<1,l,mid,seg[rt][2]);plus(rt<<1|1,mid+1,r,seg[rt][2]);
seg[rt][2]=0;
}
}
void pushup(int rt){//assert(seg[rt][1]==1&&seg[rt][2]==0)
seg[rt][0]=(seg[rt<<1][0]+seg[rt<<1|1][0])%mod;
}
int qsum(int rt,int l,int r,int ql,int qr){
if(ql<=l&&r<=qr)return seg[rt][0];
pushdown(rt,l,r);
int mid=(l+r)>>1;
if(qr<=mid)return qsum(rt<<1,l,mid,ql,qr);
if(ql>mid)return qsum(rt<<1|1,mid+1,r,ql,qr);
return (qsum(rt<<1,l,mid,ql,qr)+qsum(rt<<1|1,mid+1,r,ql,qr))%mod;
}
void Mult(int rt,int l,int r,int ql,int qr,int x){
if(ql<=l&&r<=qr){
mult(rt,x);return;
}
pushdown(rt,l,r);
int mid=(l+r)>>1;
if(ql<=mid)Mult(rt<<1,l,mid,ql,qr,x);
if(qr>mid)Mult(rt<<1|1,mid+1,r,ql,qr,x);
pushup(rt);
}
void Plus(int rt,int l,int r,int ql,int qr,int x){
if(ql<=l&&r<=qr){
plus(rt,l,r,x);return;
}
pushdown(rt,l,r);
int mid=(l+r)>>1;
if(ql<=mid)Plus(rt<<1,l,mid,ql,qr,x);
if(qr>mid)Plus(rt<<1|1,mid+1,r,ql,qr,x);
pushup(rt);
}
int main(){
scanf("%d%d",&n,&mod);
build(1,1,n);
int tests;scanf("%d",&tests);
int op,l,r,x;
while(tests--){
scanf("%d%d%d",&op,&l,&r);
if(op==3)printf("%d\n",qsum(1,1,n,l,r));
else{
scanf("%d",&x);
if(op==1)Mult(1,1,n,l,r,x);
else Plus(1,1,n,l,r,x);
}
}
return 0;
}

bzoj5039:[Jsoi2014]序列维护的更多相关文章

  1. BZOJ 5039: [Jsoi2014]序列维护

    5039: [Jsoi2014]序列维护 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 282  Solved: 169[Submit][Status ...

  2. 「JSOI2014」序列维护

    「JSOI2014」序列维护 传送门 其实这题就是luogu的模板线段树2,之所以要发题解就是因为学到了一种比较NB的 \(\text{update}\) 的方式.(参见这题) 我们可以把修改操作统一 ...

  3. P1091 合唱队形 DP 最长升序列维护

    题目描述 NN位同学站成一排,音乐老师要请其中的(N-KN−K)位同学出列,使得剩下的KK位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K,他 ...

  4. 2018.10.02 NOIP模拟 序列维护(线段树+广义欧拉定理)

    传送门 一道比较好的线段树. 考试时线性筛打错了于是弃疗. 60分暴力中有20分的快速幂乘爆了于是最后40分滚粗. 正解并不难想. 每次区间加打懒标记就行了. 区间查询要用到广义欧拉定理. 我们会发现 ...

  5. 【JSOI 2014】序列维护

    [题目链接] 点击打开链接 [算法] 线段树 注意标记下传 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 5 ...

  6. bzoj-5049-线段树

    5039: [Jsoi2014]序列维护 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 323  Solved: 193[Submit][Status ...

  7. 洛谷P3246 序列 [HNOI2016] 莫队/线段树+扫描线

    正解:莫队/线段树+扫描线 解题报告: 传送门! 似乎是有两种方法的,,,所以分别港下好了QAQ 第一种,莫队 看到这种询问很多区间之类的就会自然而然地想到莫队趴?然后仔细思考一下,发现复杂度似乎是欧 ...

  8. 【BZOJ】【1251】序列终结者

    Splay 还是splay序列维护,这题我WA了的原因是:在Push_up的时候,当前子树的max我是直接取的L.R和v[x]的最大值,但是如果没有左/右儿子,默认是会访问0号结点的mx值,而这个值没 ...

  9. mysql里的序列应用详解

    相关知识库: MySQL知识库 相关文章: ibatis中主键的返回 oracle 实现自增auto_increament 用oracle的trigger生成主键的时候和hibernate冲突的讨论 ...

随机推荐

  1. 多级反馈序列c语言模拟实现

    多级反馈队列调度算法: 1.设置多个就绪队列,并给队列赋予不同的优先级数,第一个最高,依次递减. 2.赋予各个队列中进程执行时间片的大小,优先级越高的队列,时间片越小. 3.当一个新进程进入内存后,首 ...

  2. Java集合——LinkedList源码详解

    )LinkedList直接继承于AbstractSequentialList,同时实现了List接口,也实现了Deque接口. AbstractSequentialList为顺序访问的数据存储结构提供 ...

  3. 「PKUWC2018」Minimax

    题面 题解 强势安利一波巨佬的$blog$ 线段树合并吼题啊 合并的时候要记一下$A$点权值小于$l$的概率和$A$点权值大于$r$的概率,对$B$点同样做 时空复杂度$\text O(nlogw)$ ...

  4. python全栈开发-面向对象-初识2

    python_17_day 今日主要内容: 1.类空间,对象空间,查询顺序. 2.组合. 1.类空间,对象空间,查询顺序. class Person: animal = '高级动物' soul = ' ...

  5. python3 - 元组、集合

    元组(tuple) 有序集合,不可变 a(1,2,3) a[0]获取第一个值 集合(set)增删改 >>> b = set('abc') >>> bset(['a' ...

  6. Redis5.0:现公测全免费,点击就送,注册账号,即开即用

    华为云分布式缓存服务Redis,是华为云服务的一款核心产品. 分布式缓存Redis是一款内存数据库服务,基于双机热备的高可用架构,提供单机.主从.集群等丰富类型的缓存类型. 现推出最新版本Redis5 ...

  7. linux源码学习-for_each_cpu

    刚开始读linux源码,第一眼就看到了这个很有意思的函数族,周末好好研究一下 3.13 这个组都是宏定义for循环,分析的时候注意到cpumask_next(),它在一个文件中定义了两次,还不是重载, ...

  8. scrum立会报告+燃尽图(第三周第二次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://coding.net/u/wuyy694 ...

  9. 严重: Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"] java.lang.NullPointer

    刚接触servlet类,按照课本的方法使用eclipse新建了一个servlet类. 新建完成后,在web.xml里面进行注册 这时候就会报错了. 五月 07, 2016 11:23:28 上午 or ...

  10. Java中按值传递与按引用传递的区别

    值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响 ...