2216 行星序列

 时间限制: 2 s
 空间限制: 256000 KB
 
 
题目描述 Description

“神州“载人飞船的发射成功让小可可非常激动,他立志长大后要成为一名宇航员假期一始,他就报名参加了“小小宇航员夏令营”,在这里小可可不仅学到了丰富的宇航知识,还参与解决了一些模拟飞行中发现的问题,今天指导老师交给他一个任务,在这次模拟飞行的路线上有N个行星,暂且称它们为一个行星序列,并将他们从1至n标号,在宇宙未知力量的作用下这N个行星的质量是不断变化的,所以他们对飞船产生的引力也会不断变化,小可可的任务就是在飞行途中计算这个行星序列中某段行星的质量和,以便能及时修正飞船的飞行线路,最终到达目的地,行星序列质量变化有两种形式:

1,行星序列中某一段行星的质量全部乘以一个值

2,行星序列中某一段行星的质量全部加上一个值

由于行星的质量和很大,所以求出某段行星的质量和后只要输出这个值模P的结果即可,小可可被这个任务难住了,聪明的你能够帮他完成这个任务吗?

输入描述 Input Description

第一行两个整数N和P(1<=p<=1000000000);

第二行含有N个非负整数,从左到右依次为a1,a2,…………,an(0<=ai<=100000000,1<=i<=n),其中ai表示第i个行星的质量:

第三行有一个整数m,表示模拟行星质量变化以及求质量和等操作的总次数。从第四行开始每行描述一个操作,输入的操作有以下三种形式:

操作1:1 t g c 表示把所有满足t<=i<=g的行星质量ai改为ai*c

操作2:2 t g c 表示把所有满足t<=i<=g的行星质量ai改为ai+c

操作3:3 t g 表示输出所有满足t<=i<=g的ai的和模p的值

其中:1<=t<=g<=N,0<=c<=10000000

注:同一行相邻的两数之间用一个空格隔开,每行开头和末尾没有多余空格

输出描述 Output Description

对每个操作3,按照它在输入中出现的顺序,依次一行输出一个整数表示所求行星质量和

样例输入 Sample Input
  1. 7 43
  2. 1 2 3 4 5 6 7
  3. 5
  4. 1 2 5 5
  5. 3 2 4
  6. 2 3 7 9
  7. 3 1 3
  8. 3 4 7
样例输出 Sample Output
  1. 2
  2. 35
  3. 8
数据范围及提示 Data Size & Hint

100%的数据中,M,N<=100000

40%的数据中,M,N<=10000

思路:看了别人的题解(x + add) * mul = x * mul + add * mul;

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. //#define mod 1000000007
  5. #define pi (4*atan(1.0))
  6. const int N=4e3+,M=1e6+,inf=1e9+;
  7. ll sum[M];
  8. ll flagj[M];
  9. ll flagc[M];
  10. ll mul(ll x,ll y,ll mod)
  11. {
  12. x%=mod;
  13. y%=mod;
  14. return (x*y)%mod;
  15. }
  16. void pushdown(ll pos,ll len,ll mod)
  17. {
  18. ll lson=pos*;
  19. ll rson=pos*+;
  20. flagj[lson]=(flagj[lson]*flagc[pos]+flagj[pos])%mod;
  21. flagj[rson]=(flagj[rson]*flagc[pos]+flagj[pos])%mod;
  22. flagc[lson]=(flagc[pos]*flagc[lson])%mod;
  23. flagc[rson]=(flagc[pos]*flagc[rson])%mod;
  24. sum[lson]=mul(len-(len>>),flagj[pos],mod)+sum[lson]*flagc[pos];
  25. sum[lson]%=mod;
  26. sum[rson]=mul((len>>),flagj[pos],mod)+sum[rson]*flagc[pos];
  27. sum[rson]%=mod;
  28. flagj[pos]=;
  29. flagc[pos]=;
  30. }
  31. void buildtree(ll l,ll r,ll pos,ll mod)
  32. {
  33. flagc[pos]=;
  34. flagj[pos]=;
  35. if(l==r)
  36. {
  37. scanf("%lld",&sum[pos]);
  38. sum[pos]%=mod;
  39. return;
  40. }
  41. ll mid=(l+r)>>;
  42. buildtree(l,mid,pos*,mod);
  43. buildtree(mid+,r,pos*+,mod);
  44. sum[pos]=sum[pos*]+sum[pos*+];
  45. sum[pos]%=mod;
  46. }
  47. ll query(ll L,ll R,ll l,ll r,ll pos,ll mod)
  48. {
  49. if(L<=l&&r<=R)
  50. return sum[pos]%mod;
  51. pushdown(pos,(r-l+),mod);
  52. ll mid=(l+r)>>;
  53. ll ans=;
  54. if(L<=mid)ans+=query(L,R,l,mid,pos*,mod);
  55. if(mid<R)ans+=query(L,R,mid+,r,pos*+,mod);
  56. return ans%=mod;
  57. }
  58. void update(ll L,ll R,ll change,ll l,ll r,ll pos,ll flag,ll mod)
  59. {
  60. if(L<=l&&r<=R)
  61. {
  62. if(flag==1ll)
  63. {
  64. flagj[pos]*=change;
  65. flagj[pos]%=mod;
  66. flagc[pos]*=change;
  67. flagc[pos]%=mod;
  68. sum[pos]=mul(sum[pos],change,mod);
  69. }
  70. else
  71. {
  72. flagj[pos]+=change;
  73. flagj[pos]%=mod;
  74. sum[pos]+=mul(r-l+,change,mod);
  75. sum[pos]%=mod;
  76. }
  77. return;
  78. }
  79. pushdown(pos,r-l+,mod);
  80. ll mid=(l+r)/;
  81. if(L<=mid)update(L,R,change,l,mid,pos*,flag,mod);
  82. if(R>mid)update(L,R,change,mid+,r,pos*+,flag,mod);
  83. sum[pos]=sum[pos*]+sum[pos*+];
  84. sum[pos]%=mod;
  85. }
  86. int main()
  87. {
  88. ll x,y,z,i,t;
  89. while(~scanf("%lld%lld",&x,&y))
  90. {
  91. buildtree(,x,,y);
  92. ll q;
  93. scanf("%lld",&q);
  94. for(i=;i<q;i++)
  95. {
  96. ll flag,l,r;
  97. scanf("%lld%lld%lld",&flag,&l,&r);
  98. if(flag==3ll)
  99. {
  100. printf("%lld\n",query(l,r,,x,,y));
  101. }
  102. else
  103. {
  104. ll c;
  105. scanf("%lld",&c);
  106. update(l,r,c,,x,,flag,y);
  107. }
  108. }
  109. }
  110. return ;
  111. }

codevs 2216 行星序列 线段树+延迟标记(BZOJ 1798)的更多相关文章

  1. HDU 3468:A Simple Problem with Integers(线段树+延迟标记)

    A Simple Problem with Integers Case Time Limit: 2000MS Description You have N integers, A1, A2, ... ...

  2. codevs 1690 开关灯 线段树+延迟标记

    1690 开关灯  时间限制: 1 s  空间限制: 128000 KB   题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这 ...

  3. 【codevs2216】行星序列 线段树 区间两异同修改+区间求和*****

    [codevs2216]行星序列 2014年2月22日3501 题目描述 Description “神州“载人飞船的发射成功让小可可非常激动,他立志长大后要成为一名宇航员假期一始,他就报名参加了“小小 ...

  4. Tree(树链剖分+线段树延迟标记)

    Tree http://poj.org/problem?id=3237 Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 12 ...

  5. HDU4893--Wow! Such Sequence! (线段树 延迟标记)

    Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  6. COGS.1272.[AHOI2009]行星序列(线段树 区间加、乘、求和)

    题目链接 //注意取模! #include<cstdio> #include<cctype> using namespace std; const int N=1e5+5; i ...

  7. Jiu Yuan Wants to Eat(树链剖分+线段树延迟标记)

    Jiu Yuan Wants to Eat https://nanti.jisuanke.com/t/31714 You ye Jiu yuan is the daughter of the Grea ...

  8. Snacks HDU 5692 dfs序列+线段树

    Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...

  9. bzoj 1095 [ZJOI2007]Hide 捉迷藏(括号序列+线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1095 [题意] 给定一棵树,树上颜色或白或黑而且可以更改,多个询问求最远黑点之间的距离 ...

随机推荐

  1. 【BZOJ5008】方师傅的房子 三角剖分

    [BZOJ5008]方师傅的房子 Description 方师傅来到了一个二维平面.他站在原点上,觉得这里风景不错,就建了一个房子.这个房子是n个点的凸多边形,原点一定严格在凸多边形内部.有m个人也到 ...

  2. 【BZOJ1720】[Usaco2006 Jan]Corral the Cows 奶牛围栏 双指针法

    [BZOJ1720][Usaco2006 Jan]Corral the Cows 奶牛围栏 Description Farmer John wishes to build a corral for h ...

  3. Windows Phone 几种页面间传递数据的方式

    首先,我们要引用:using Microsoft.Phone.Shell; 第一种: // 导航到新页面 NavigationService.Navigate(new Uri("/Detai ...

  4. windows系统常用软件及配置介绍

    常用工具 ,,,, 开发工具 ,,, 快捷键 ... 等等 vvv 等等

  5. angularJS指令系统---Directive

    指令:Directive angularJS 有一套完整的,可拓展的,用来帮助web应用开发的指令集: 在建立DOM期间,和HTML关联着的指令会被检测到,并被执行: 在angularJS中将前缀为 ...

  6. CSS Spritec下载,精灵图,雪碧图,初探之原理、使用

    CSS Spritec下载,精灵图,雪碧图,初探之原理.使用 关于CSS Sprite CSSSprites在国内很多人叫css精灵雪碧图,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零 ...

  7. 集成tomcat插件到eclipse

    Eclipse中Tomcat的配置及简单例子 环境: 系统: Windows 7 64位专业版 Eclipse: Eclipse Java EE IDE for Web Developers.     ...

  8. OGG双向复制

    注意:在进行如下配置之前,先在源数据库(原来的目标数据库)端添加辅助的redolog配置:      1.SQL> alter database add supplemental log dat ...

  9. jira-source--plugin

    X11 forward impact on jira plugin system initialization. 而Linux的curl使用的证书库在文件“/etc/pki/tls/certs/ca- ...

  10. java 入门基础学习

    问题一:java编写的源代码为什么能在windows/linux/macOS操作系统运行?运行原理是什么?为什么说它是跨平台的? 从jdk/jvm/jre说起 1.JDK简介 https://blog ...