Another Array of Orz Pandas

题目链接:http://acm.xidian.edu.cn/problem.php?id=1187

线段树

线段树维护区间和以及区间内各个数平方和,对于每一个询问ans=(sum2-pow_sum)/2

代码如下:

  1. #include<cstdio>
  2. #include<cstring>
  3. #define lson (x<<1)
  4. #define rson (x<<1|1)
  5. #define mid ((l+r)>>1)
  6. #define N 100007
  7. typedef long long LL;
  8. struct nod{
  9. LL sum,lazy,or2zds;
  10. }a[N<<];
  11. const LL mod=1e9+;
  12. const LL Max=1e9;
  13. LL n,m;
  14. void push_up(LL x){
  15. a[x].sum=(a[lson].sum+a[rson].sum)%mod;
  16. a[x].or2zds=(a[lson].or2zds+a[rson].or2zds)%mod;
  17. }
  18. void push_down(LL x,LL l,LL r){
  19. a[lson].or2zds=(a[lson].or2zds+(a[x].lazy*a[x].lazy)%mod*(mid+-l)+*a[x].lazy*a[lson].sum+mod)%mod;
  20. a[lson].sum=(a[lson].sum+a[x].lazy*(mid+-l))%mod;
  21. a[lson].lazy=(a[lson].lazy+a[x].lazy)%mod;
  22. a[rson].or2zds=(a[rson].or2zds+(a[x].lazy*a[x].lazy)%mod*(r-mid)+*a[x].lazy*a[rson].sum+mod)%mod;
  23. a[rson].sum=(a[rson].sum+a[x].lazy*(r-mid))%mod;
  24. a[rson].lazy=(a[rson].lazy+a[x].lazy)%mod;
  25. a[x].lazy=;
  26. }
  27. void add(LL x,LL l,LL r,LL cl,LL cr,LL v){
  28. if(cl<=l&&r<=cr){
  29. a[x].or2zds=(a[x].or2zds+(v*v)%mod*(r-l+)%mod+*v*a[x].sum)%mod;
  30. a[x].sum=(a[x].sum+v*(r-l+))%mod;
  31. a[x].lazy=(a[x].lazy+v)%mod;
  32. return;
  33. }
  34. if(a[x].lazy!=)push_down(x,l,r);
  35. if(cl<=mid)add(lson,l,mid,cl,cr,v);
  36. if(mid<cr)add(rson,mid+,r,cl,cr,v);
  37. push_up(x);
  38. }
  39. void query(LL x,LL l,LL r,LL ql,LL qr,LL &sum,LL &sum2){
  40. if(ql<=l&&r<=qr){
  41. sum=(sum+a[x].sum)%mod;
  42. sum2=(sum2+a[x].or2zds)%mod;
  43. return;
  44. }
  45. if(a[x].lazy!=)push_down(x,l,r);
  46. if(ql<=mid)query(lson,l,mid,ql,qr,sum,sum2);
  47. if(mid<qr)query(rson,mid+,r,ql,qr,sum,sum2);
  48. }
  49. int main(void){
  50. while(~scanf("%lld%lld",&n,&m)){
  51. memset(a,,sizeof(a));
  52. LL l,r,op,k;
  53. for(LL i=;i<m;i++){
  54. scanf("%lld",&op);
  55. if(op==){
  56. scanf("%lld%lld%lld",&l,&r,&k);
  57. add(,,n,l,r,k);
  58. }else {
  59. scanf("%lld%lld",&l,&r);
  60. LL sum=,sum2=;
  61. query(,,n,l,r,sum,sum2);
  62. printf("%lld\n",(sum*sum%mod-sum2+mod)%mod*%mod);
  63. }
  64. }
  65. }
  66. return ;
  67. }

Another Array of Orz Pandas的更多相关文章

  1. XidianOJ 1120 Gold of Orz Pandas

    题目描述 Orz Panda is addicted to one RPG game. To make his character stronger, he have to fulfil tasks ...

  2. XidianOJ 1195 Industry of Orz Pandas

    --正文 贪心 排序好慢慢找就好 #include <iostream> #include <cstring> #include <cstdio> #include ...

  3. Cai Xukun and Orz Pandas Gym - 102309C

    题目链接:https://vjudge.net/problem/Gym-102309C 题意:给定蔡徐坤投篮的位置和篮筐的位置以及最大初速度,求一个初速度和时间. 思路:一开始我以为要用到二分,后面仔 ...

  4. 【Codeforces】Orz Panda Cup

    大大出的题 大大经常吐槽没有人补,所以我决定做一个 A. APA of Orz Pandas 题意:给你一个包含+-*/%和()的表达式,让你把它转化成java里BigInteger的形式 大概就像这 ...

  5. numpy和pandas的基础索引切片

    Numpy的索引切片 索引 In [72]: arr = np.array([[[1,1,1],[2,2,2]],[[3,3,3],[4,4,4]]]) In [73]: arr Out[73]: a ...

  6. Python:pandas(二)——pandas函数

    Python:pandas(一) 这一章翻译总结自:pandas官方文档--General functions 空值:pd.NaT.np.nan //判断是否为空 if a is np.nan: .. ...

  7. xdoj-1117(记忆化搜索+组合数学)

    因为我是从上到下,所以就不叫动态规划而叫记忆化搜索吧 (不过运行时间只有3ms....应该是很不错的吧) 排版怎么那么难看...编辑的时候不是这样子的啊?! 思想 : 大眼一看应该是一道很裸的状压dp ...

  8. scikit-learn_cookbook1: 高性能机器学习-NumPy

    源码下载 在本章主要内容: NumPy基础知识 加载iris数据集 查看iris数据集 用pandas查看iris数据集 用NumPy和matplotlib绘图 最小机器学习配方 - SVM分类 介绍 ...

  9. 线性回归linear regression(python脚本实现)

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...

随机推荐

  1. EPROCESS KPROCESS PEB

    EPROCESS KPROCESS PEB <寒江独钓>内核学习笔记(2)     在学习笔记(1)中,我们学习了IRP的数据结构的相关知识,接下来我们继续来学习内核中很重要的另一批数据结 ...

  2. Hive查询结果批量插入分区

    在hive的数据建表时,为了查询的高效性,我们经常会对表建立分区,例如下面的表 create external table dm_fan_photo_icf_basic(user string, it ...

  3. VS2010下C/C++连接MySql数据库的方法

    1. 新建一个C++控制台程序 2. 选择项目 CMySql属性 3. 选择配置属性 C/C++ 常规 附加包含目录 4. 添加包含目录C:\Program Files\MySQL\Connector ...

  4. C++指针数组和指向指针的指针

    指针数组 定义: 如果一个 数组,其元素均为指针型数据,该数组为指针数组,也就是说,指针数组中的每一个元素相当于一个指针变量,它的值都是地址. 形式: 一维指针数组的定义形式为: int[类型名] * ...

  5. Linux环境进程间通信(四):信号灯

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

  6. NuGet的本地服务器安装与Package的发布

    NuGet的本地服务器安装与Package的发布 主要的步骤是按照下面的例子来做的: NuGet学习笔记(1)——初识NuGet及快速安装使用 NuGet学习笔记(2)——使用图形化界面打包自己的类库 ...

  7. GEF-whole-upload教程中遇到的问题及解决方案

    最近在学习GEF开发,使用的是GEF-whole-upload这个教程.由于教程当时所使用的版本与本人使用的版本有一些差异,中间出现了不少问题,现在将解决方案分享给大家. 本人使用的Eclipse版本 ...

  8. Linux环境fork()函数详解

    Linux环境fork()函数详解 引言 先来看一段代码吧, 1 #include <sys/types.h> 2 #include <unistd.h> 3 #include ...

  9. (Java 多线程系列)java volatile详解

    在前面的文章里面介绍了synchronized关键字的用法,这篇主要介绍volatile关键字的用法. Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其它 ...

  10. 搭建WEB邮件系统,爆强!

    Linux+postfix+extmail+dovecot打造基于web页面的邮件系统 原文地址: http://blog.csdn.net/deansrk/article/details/67177 ...