做做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;
}

转载于:https://www.cnblogs.com/liu-runda/p/7532140.html

bzoj5039:[Jsoi2014]序列维护相关推荐

  1. bzoj 1798 5039: [Jsoi2014]序列维护(线段树)

    5039: [Jsoi2014]序列维护 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 17  Solved: 14 [Submit][Status ...

  2. 【JSOI2014】【BZOJ5039】序列维护(线段树模板)

    problem 已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和 solution 区间修改+区间查询. 维护两个LazyTa ...

  3. 2017.9.13 序列维护 思考记录

    终于不对拍1A线段树了.太不容易了 虽然这题挺裸的,省选福利,记住先乘后加的原则就可以搞了 注意位运算和取模的优先级,不要乱了,注意代码的位置问题 码(发现我的线段树非常瘦): #include< ...

  4. [BOI2007]Sequence 序列问题

    题目描述 对于一个给定的序列a1, -, an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和ai+1用一个元素max(ai,ai+1)替代,这样得到一个比原来序列短的新序列.这一 ...

  5. BZOJ 4921: 互质序列 数学 枚举

    4921: 互质序列 Time Limit: 1 Sec  Memory Limit: 256 MB Submit: 112  Solved: 61 [Submit][Status][Discuss] ...

  6. 【树链剖分+线段树维护最小费用流】大灾变

    恶心题 要写两个线段树还得是区间覆盖的,其中一个是树链剖分的,另一个是维护括号序列的. 有两种边,一种是免费的,一种是有代价的,每次取最短路,树形结构大约就不要退流了吧. 每次树链剖分找最短边,括号序 ...

  7. Disruptor源码解析 + 实战

    本文转自微信公众号:[Amos博客] juc下的队列 1:从上图可以看出,juc下的队列基本采用加锁方式保证线程安全.通过不加锁的方式实现的队列都是无界的(无法保证队列的长度在限定的范围).而加锁的方 ...

  8. poj2823 Sliding Window

    题目链接:http://poj.org/problem?id=2823 题意: 一个长度为n的序列上有一个长度为k的滑窗从左向右滑动,问每个时刻滑窗内最小值和最大值. 题解: 我们考虑单调队列. 对于 ...

  9. 蓝桥杯 - 试题 J: 砍竹子(双向链表+堆/思维)

    题目大意:给出一排 nnn 个竹子的高度,每次操作可以选择连续的,高度相同的竹子,使其高度变为 ⌊⌊H2+1⌋⌋\lfloor \sqrt{\lfloor \frac{H}{2}+1\rfloor} ...

最新文章

  1. retinaface精度
  2. pythonurllib模块-Python3中核心模块urllib的用法大全
  3. 用掘金-Markdown 官方语法总结大全
  4. cpu 抖动_微抖动,繁忙的等待和绑定CPU
  5. 如何判断一个变量是数组还是对象
  6. 微软称伊朗国家黑客攻击美国国防技术公司
  7. c# 火狐浏览器怎么嵌入窗体中_「C#上位机必看」你们想要的练手项目来了
  8. java多线程-读写锁原理
  9. find ctime 加减n时间范围
  10. 会话管理:Cookie和Session
  11. ftp工具绿色版,四款好用的绿色版ftp工具
  12. 零基础Matlab Note9--离散数据绘图set(gca, )
  13. 【每日进步一点点】C语言刷题技巧及训练1
  14. NodeJS C++ Addons之C++类实例包装与异步操作
  15. child_process.spawn中文乱码
  16. 巴基斯坦圣诞节期间“毒酒”致42人死亡
  17. TypeScript 初学者入门学习笔记(一)
  18. 服务器发送二进制文件大小,如何从dotnet核心服务器向SignalR客户端发送二进制文件...
  19. Oracle 12c中增强的PL/SQL功能
  20. 诛仙手游服务器购买无限制,全新福利提升 摆摊amp;购买增加次数限制_18183诛仙手游专区...

热门文章

  1. ubuntu检查端口是否开启_Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息...
  2. java只有高跟很高_女明星们为了合影不输,练就踩高跷本领,鞋跟一个比一个高!...
  3. c语言六套,C语言编程笔试题(第六套)
  4. 【uniapp】CSS3 的 calc() 函数使用表达式动态计算
  5. Linux RedHat7.0 上vsftp配置
  6. chrome 取消常用缩略图_怎么去掉 Chrome 新标签页的缩略图?
  7. linux云管理,教程|云帮手部署Linux公有云管理系统
  8. 5.0安装没有costom mysql_Zabbix5.0监控mysql配置
  9. mysql 语句性能分析_mysql的sql语句的性能诊断分析
  10. c# string 占位符_C# 基础知识系列- 9 字符串的更多用法(一)