数据比线段树2要毒瘤,一直60分的原因是:

1.long long 没开

2.没有边做边%或者像我P3373一样写了个看着像的边做边%

3.要看注释的话可以跳到P3373

上代码

  1 #include<iostream>
  2 #include<cmath>
  3 #include<cstdio>
  4 #include<cstring>
  5 #include<queue>
  6 #define lson i*2,l,mid
  7 #define rson i*2+1,mid+1,r
  8 using namespace std;
  9
 10 struct tree{
 11     long long mul;
 12     long long add;
 13     long long sum;
 14     long long l,r;
 15 }t[400860];
 16
 17 long long n,m,a[100860],p;
 18
 19 void build_tree(long long i,long long l,long long r)
 20 {
 21     t[i].l=l;
 22     t[i].r=r;
 23     t[i].mul=1;
 24     t[i].sum=0;
 25     t[i].add=0;
 26     if(l==r)
 27     {
 28         t[i].sum=a[l]%p;
 29         return ;
 30     }
 31     long long mid=(l+r)/2;
 32     build_tree(lson);
 33     build_tree(rson);
 34     t[i].sum=(t[i*2].sum+t[i*2+1].sum)%p;
 35 }
 36
 37 void pushdown2(long long i)
 38 {
 39     t[i*2].mul=t[i].mul%p*t[i*2].mul%p;
 40     t[i*2+1].mul=t[i].mul%p*t[i*2+1].mul%p;
 41     t[i*2].add=(t[i*2].add%p*t[i].mul%p+t[i].add)%p;
 42     t[i*2+1].add=(t[i*2+1].add%p*t[i].mul%p+t[i].add)%p;
 43     t[i*2].sum=(t[i].mul%p*t[i*2].sum%p+t[i].add%p*(t[i*2].r-t[i*2].l+1))%p;
 44     t[i*2+1].sum=(t[i].mul%p*t[i*2+1].sum+t[i].add%p*(t[i*2+1].r-t[i*2+1].l+1))%p;
 45     t[i].add=0;
 46     t[i].mul=1;
 47 }
 48 void pushdown(long long i)
 49 {
 50     t[i*2].mul=t[i].mul%p*t[i*2].mul%p;
 51     t[i*2+1].mul=t[i*2+1].mul%p*t[i].mul%p;
 52     t[i*2].add=(t[i*2].add%p*t[i].mul%p+t[i].add)%p;
 53     t[i*2+1].add=(t[i*2+1].add%p*t[i].mul%p+t[i].add)%p;
 54     t[i*2].sum=(t[i].mul%p*t[i*2].sum%p+t[i].add%p*(t[i*2].r-t[i*2].l+1))%p;
 55     t[i*2+1].sum=(t[i].mul%p*t[i*2+1].sum%p+t[i].add%p*(t[i*2+1].r-t[i*2+1].l+1))%p;
 56     t[i].add=0;
 57     t[i].mul=1;
 58 }
 59 void mul_tree(long long i,long long l,long long r,long long x,long long y,long long a)
 60 {
 61     if(l>=x&&r<=y)
 62     {
 63         t[i].sum*=a%p;
 64         t[i].sum%=p;
 65         t[i].mul*=a%p;
 66         t[i].mul%=p;
 67         t[i].add*=a%p;
 68         t[i].mul%=p;
 69         return ;
 70     }
 71     pushdown(i);
 72     long long mid=(l+r)/2;
 73     if(x<=mid) mul_tree(lson,x,y,a);
 74     if(y>mid) mul_tree(rson,x,y,a);
 75     t[i].sum=(t[i*2].sum+t[i*2+1].sum)%p;
 76 }
 77 void add_tree(long long i,long long l,long long r,long long x,long long y,long long a)
 78 {
 79     if(l>=x&&r<=y)
 80     {
 81         //t[i].mul*=a%p;
 82         t[i].add+=a%p;
 83         t[i].add%=p;
 84         t[i].sum+=(t[i].r-t[i].l+1)*a%p;
 85         t[i].sum%=p;
 86         return ;
 87     }
 88     pushdown(i);
 89     long long mid=(l+r)/2;
 90     if(x<=mid) add_tree(lson,x,y,a);
 91     if(y>mid) add_tree(rson,x,y,a);
 92     t[i].sum=(t[i*2].sum+t[i*2+1].sum)%p;
 93  }
 94
 95 long long query_tree(long long i,long long l,long long r,long long a,long long b)
 96 {
 97      if(l>=a&&r<=b)
 98      {
 99          return t[i].sum%p;
100     }
101     long long mid=(l+r)/2;
102     long long ans=0;
103     pushdown(i);
104     if(a<=mid) ans+=query_tree(lson,a,b)%p;
105     if(b>mid) ans+=query_tree(rson,a,b)%p;
106     return ans%p;
107
108 }
109 int main()
110 {
111     scanf("%lld %lld ",&n,&p);
112     long long i,j;
113     for(i=1;i<=n;i++)
114     scanf("%lld ",&a[i]);
115     scanf("%lld ",&m);
116     build_tree(1,1,n);
117     for(i=1;i<=m;i++)
118     {
119         long long k;
120         long long t1,t2,t3;
121         scanf("%lld ",&k);
122         if(k==1)
123         {
124             scanf("%lld %lld %lld ",&t1,&t2,&t3);
125             mul_tree(1,1,n,t1,t2,t3);
126             //printf("%lld \n",query_tree(1,1,n,t1,t2)%p);
127         }
128         if(k==2)
129         {
130             scanf("%lld %lld %lld ",&t1,&t2,&t3);
131             add_tree(1,1,n,t1,t2,t3);
132             //printf("%lld \n",query_tree(1,1,n,t1,t2)%p);
133         }
134         if(k==3)
135         {
136             scanf("%lld %lld ",&t1,&t2);
137             printf("%lld \n",query_tree(1,1,n,t1,t2)%p);
138         }
139      }
140      return 0;
141 }

转载于:https://www.cnblogs.com/zsx6/p/10347083.html

洛谷P2023 [AHOI2009]维护序列相关推荐

  1. 【洛谷P2023】维护序列

    这个板子不打就是手生--一段时间不会处理线段树了qwq,这个题难点就是在于下放标记 #include<iostream> #include<cstring> #include& ...

  2. P2023 [AHOI2009]维护序列

    线段树模板题 此题关键在于 pushdown 考虑加法标记 lt1 和 乘法标记 lt2 考虑到乘法优先级 要 高于 加法优先级 因此在 pushdown 里先 传 lt2 再传 lt1 注意 lt2 ...

  3. BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...

  4. [AHOI2009]维护序列

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

  5. ahoi2009维护序列

    链接:https://www.luogu.org/problemnew/show/P2023 裸的线段树维护+* 代码: #include <bits/stdc++.h> using na ...

  6. 【洛谷3648】[APIO2014] 序列分割(斜率优化DP)

    点此看题面 大致题意: 你可以对一个序列进行\(k\)次分割,每次得分为两个块元素和的乘积,求总得分的最大值. 区间\(DPor\)斜率优化\(DP\) 这题目第一眼看上去感觉很明显是区间\(DP\) ...

  7. YBTOJ洛谷P4331:数字序列(左偏树)

    文章目录 题目描述 数据范围 解析 代码 题目描述 数据范围 n<=1e6n<=1e6n<=1e6 解析 先考虑简单情况 如果原数列是单调递增的,显然应该使bi=aib_i=a_ib ...

  8. 洛谷 P2051 [AHOI2009]中国象棋 状态压缩思想DP

    P2051 [AHOI2009]中国象棋 题意: 给定一个n*m的空棋盘,问合法放置任意多个炮有多少种情况.合法放置的意思是棋子炮不会相互打到. 思路: 这道题我们可以发现因为炮是隔一个棋子可以打出去 ...

  9. 洛谷2051 [AHOI2009]中国象棋

    题目链接 题意概述:n行m列棋盘放若干个棋子每行每列最多两个求方案总数,答案对9999973取模. 可以比较容易看出这是个dp,设f[i][j][k]表示前i行j列放1个棋子k列放2个棋子的方案总数. ...

最新文章

  1. portlet java_探秘企业门户开发:Java Portlet入门(2)
  2. 16 级高代 II 思考题十的多种证明
  3. [bzoj 3534][Sdoi2014] 重建
  4. python元胞转list_[Python练习向] 简易元胞自动机框架
  5. 程序员新人怎样在复杂代码中找 bug?
  6. x86服务器当虚拟化的存储,龙存科技-软件定义数据中心产品提供商
  7. linux版本i686,在Ubuntu中'i686'是什么意思? - Ubuntu问答
  8. UML统一建模语言习题一
  9. android 界面置顶,Android实现界面滚动时顶部部分内容置顶(附源码)
  10. hssfrow 单元格样式_poi导出excel单元格中画斜线_AnyReport报表
  11. c语言赋值运算符大全,C语言基础学习运算符-赋值运算符(示例代码)
  12. java 苹果vcf解析_iOS开发- 生成/解析.vcf文件
  13. [Python]提取docx/网页超链接
  14. Atmel和SIGFOX在远程物联网连接领域开展合作
  15. 微信聊天自动解析html文本,微信小程序纯文本实现@功能
  16. 使用Factory IO连接TIA Portal 自动化仿真
  17. 电子书沦为“压泡面”神器,其实高端电子书就该从这两个里边选
  18. img 图片加载设置超时
  19. 基于STM32单片机的跑步机心率检测proteus仿真原理图PCB
  20. (ROS)Moveit编程示例

热门文章

  1. java中获取链表的第一个节点,两个链表中的第一个公共节点(java)
  2. css flex布局 padding,css三栏布局的三种实现方式(圣杯布局、双飞翼布局、Flex布局)...
  3. IIS出现server application error解决方案
  4. exception e 是泛类吗_Spring异步编程 | 你的@Async就真的异步吗?异步历险奇遇记
  5. 中南大学 10科学计算和 MATLAB 语言 矩阵变换
  6. 安装 卸载 mysql linux,Linux 下MySQL 安装与卸载
  7. python语言程序设计实践教程实验八答案_Python程序设计实验报告: 实验八 文件...
  8. C语言:编写一个函数,计算二维数组中的最大元素,数组以指针的方式传递
  9. 彩电主板更换后图像是矩型怎么处理_液晶彩电主板常见故障维修
  10. clickhouse 数据存储