平方和

总时间限制: 3000ms 内存限制: 65536kB

描述

给出n(1<=n<=500000)个数字,下标从1开始

执行m(1<=m<=500000)次操作,操作可分为两种:

1 l r x:将区间[l,r]内的每个数加上x  1<=l<=r<=n -100<=x<=100

2 l r:输出区间[l,r]内每个数平方之和

输入
多组输入
第一行两个整数n m
第二行n个整数
余下m行表示m个操作意义叙述于上

输出
对应每个2操作输出相应的值
样例输入
  1. 5 3
  2. 1 1 1 1 1
  3. 2 1 5
  4. 1 1 5 1
  5. 2 1 5
样例输出
  1. 5
  2. 20
  3.  
  4. 线段树成段更新
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. #define N 500005
  6. #define ll long long
  7.  
  8. ll add[N<<];
  9. ll sq[N<<];
  10. ll sum[N<<];
  11.  
  12. void pushup(int rt)
  13. {
  14. sum[rt]=sum[rt<<]+sum[rt<<|];
  15. sq[rt]=sq[rt<<]+sq[rt<<|];
  16. }
  17. void pushdown(int l,int r,int rt)
  18. {
  19. if(add[rt])
  20. {
  21. int m=(l+r)>>;
  22. add[rt<<]+=add[rt];
  23. add[rt<<|]+=add[rt];
  24.  
  25. sq[rt<<]+=(*add[rt]*sum[rt<<]+(m-l+)*add[rt]*add[rt]);
  26. sq[rt<<|]+=(*add[rt]*sum[rt<<|]+(r-m)*add[rt]*add[rt]);
  27.  
  28. sum[rt<<]+=(m-l+)*add[rt];
  29. sum[rt<<|]+=(r-m)*add[rt];
  30. add[rt]=;
  31. }
  32. }
  33. void build(int l,int r,int rt)
  34. {
  35. add[rt]=;
  36. if(l==r)
  37. {
  38. scanf("%d",&sum[rt]);
  39. sq[rt]=sum[rt]*sum[rt];
  40. return;
  41. }
  42. int m=(l+r)>>;
  43. build(l,m,rt<<);
  44. build(m+,r,rt<<|);
  45. pushup(rt);
  46. }
  47. void update(int l,int r,int rt,int L,int R,int c)
  48. {
  49. if(l==L && r==R)
  50. {
  51. add[rt]+=c;
  52. sq[rt]+=*sum[rt]*c+(r-l+)*c*c;
  53. sum[rt]+=(r-l+)*c;
  54. return;
  55. }
  56. int m=(l+r)>>;
  57. pushdown(l,r,rt);
  58. if(R<=m) update(l,m,rt<<,L,R,c);
  59. else if(L>m) update(m+,r,rt<<|,L,R,c);
  60. else
  61. {
  62. update(l,m,rt<<,L,m,c);
  63. update(m+,r,rt<<|,m+,R,c);
  64. }
  65. pushup(rt);
  66. }
  67. ll query(int l,int r,int rt,int L,int R)
  68. {
  69. if(l==L && r==R)
  70. {
  71. return sq[rt];
  72. }
  73. int m=(l+r)>>;
  74. pushdown(l,r,rt);
  75. if(R<=m) return query(l,m,rt<<,L,R);
  76. else if(L>m) return query(m+,r,rt<<|,L,R);
  77. else return query(l,m,rt<<,L,m)+query(m+,r,rt<<|,m+,R);
  78. }
  79. int main()
  80. {
  81. int n,m;
  82. while(scanf("%d%d",&n,&m)!=EOF)
  83. {
  84. build(,n,);
  85. while(m--)
  86. {
  87. int op,a,b,c;
  88. scanf("%d",&op);
  89. if(op==)
  90. {
  91. scanf("%d%d%d",&a,&b,&c);
  92. update(,n,,a,b,c);
  93. }
  94. else
  95. {
  96. scanf("%d%d",&a,&b);
  97. printf("%lld\n",query(,n,,a,b));
  98. }
  99. }
  100. }
  101. return ;
  102. }

[OpenJudge] 平方和的更多相关文章

  1. 【OpenJudge 8463】Stupid cat & Doge

    http://noi.openjudge.cn/ch0204/8463/ 挺恶心的一道简单分治. 一开始准备非递归. 大if判断,后来发现代码量过长,决定大打表判断后继情况,后来发现序号不对称. 最后 ...

  2. 【OpenJudge 191】【POJ 1189】钉子和小球

    http://noi.openjudge.cn/ch0405/191/ http://poj.org/problem?id=1189 一开始忘了\(2^{50}\)没超long long差点写高精度Q ...

  3. 【OpenJudge 1665】完美覆盖

    http://noi.openjudge.cn/ch0405/1665/?lang=zh_CN 状压水题,手动转移 #include<cstdio> #include<cstring ...

  4. 【OpenJudge 1793】矩形覆盖

    http://noi.openjudge.cn/ch0405/1793/ 好虐的一道题啊. 看数据范围,一眼状压,然后调了好长时间QwQ 很容易想到覆盖的点数作为状态,我用状态i表示至少覆盖状态i表示 ...

  5. OpenJudge 2990:符号三角形 解析报告

    2990:符号三角形 总时间限制:  1000ms       内存限制:  65536kB 描述 符号三角形的第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“ ...

  6. AC日记——与7无关的数 openjudge 1.5 39

    39:与7无关的数 总时间限制:  1000ms 内存限制:  65536kB 描述 一个正整数,如果它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数.现求所有小于等于n( ...

  7. noi题库(noi.openjudge.cn) 1.5编程基础之循环控制T36——T45

    T36 计算多项式的值 描述 假定多项式的形式为xn+xn-1+-+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值. 输入 输入仅一行,包括x和n,用单个空格隔开.x在flo ...

  8. hdu 2007 - 平方和与立方和

    题目大意: 给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和. 解答: 坑你没商量!要考虑输入数a,b的大小.如果a>b,需要交换a,b的值. 1: #include<s ...

  9. OpenJudge 7624 山区建小学

    在openjudge似乎无法凭题号搜到题...? 总时间限制:  1000ms  内存限制:  65536kB 描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任 ...

随机推荐

  1. c++ 继承学习笔记

    三大继承原则(由我杜撰) 基类的私有成员被继承后不可见(优先级最高) 公有继承不改变基类成员属性 保护继承(私有继承)把基类成员变为保护成员(私有成员)

  2. How to enable $Admin Shares in Windows 7

    Quote from: http://www.wintips.org/how-to-enable-admin-shares-windows-7/ As “Administrative shares” ...

  3. 在Windows下用Mingw 4.5.2编译X264

    1.下载mingw-get-inst-20110530.rar(http://www.baidu.com/link?url=-ixXW6QiuEl8CA1dKudoWCxzcTvxrpQ0nXRBHU ...

  4. 构造函数为什么不能是虚函数 ( 转载自C/C++程序员之家)

    从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的.问题出来了,如果构造函数是虚的,就需要通过 vtable来调用, ...

  5. remastersys修改默认选项

    1.vim /etc/remastersys/isolinux/isolinux.cfg.vesamenu default vesamenu.c32prompt 0timeout 100 menu t ...

  6. Putty终端 模拟 远程登录 虚拟机Linux

    1.虚拟机设置 虚拟机设置->网络适配器->选择Host-only:与主机共享一个私有网络 桥接.NAT.Host-only三种网络模式的说明: (1)桥接:表示在局域网内是一台真实的系统 ...

  7. css文本换行你所不知道的技巧

    前言:这是最近翻译的一篇文章 我在header标签开头忘里边加入一个span标签的时候,有一点小问题.我总是想确保在span标签之前能够换行.明确地讲,在标签前边加入<br> 并没有什么错 ...

  8. firemonkey 得到屏幕信息

    type TO_MONITOR = class hm: HMONITOR; end; function EnumMonitorsProc(hm: HMONITOR; dc: HDC; r: PRect ...

  9. 学会Twitter Bootstrap不再难

    Twitter Bootstrap 3.0 是对其过去的重大改变,现在它更偏向于移动应用的框架,并且宣称是最好的web设计css框架之一,的确如此. 可能有人曾经使用过Twitter Bootstra ...

  10. 2016031901 - ubuntu15.1安装驱动

    个人使用u盘安装的ubuntu15.1,安装后找不到无线,主要是驱动没有安装的问题. 解决方案如下: 01.wife无法找到 02.pool文件夹内都是驱动,我们需要的网络驱动也在内 03.网络驱动包 ...