平方和

总时间限制: 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操作输出相应的值
样例输入
5 3
1 1 1 1 1
2 1 5
1 1 5 1
2 1 5
样例输出
5
20 线段树成段更新
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 500005
#define ll long long ll add[N<<];
ll sq[N<<];
ll sum[N<<]; void pushup(int rt)
{
sum[rt]=sum[rt<<]+sum[rt<<|];
sq[rt]=sq[rt<<]+sq[rt<<|];
}
void pushdown(int l,int r,int rt)
{
if(add[rt])
{
int m=(l+r)>>;
add[rt<<]+=add[rt];
add[rt<<|]+=add[rt]; sq[rt<<]+=(*add[rt]*sum[rt<<]+(m-l+)*add[rt]*add[rt]);
sq[rt<<|]+=(*add[rt]*sum[rt<<|]+(r-m)*add[rt]*add[rt]); sum[rt<<]+=(m-l+)*add[rt];
sum[rt<<|]+=(r-m)*add[rt];
add[rt]=;
}
}
void build(int l,int r,int rt)
{
add[rt]=;
if(l==r)
{
scanf("%d",&sum[rt]);
sq[rt]=sum[rt]*sum[rt];
return;
}
int m=(l+r)>>;
build(l,m,rt<<);
build(m+,r,rt<<|);
pushup(rt);
}
void update(int l,int r,int rt,int L,int R,int c)
{
if(l==L && r==R)
{
add[rt]+=c;
sq[rt]+=*sum[rt]*c+(r-l+)*c*c;
sum[rt]+=(r-l+)*c;
return;
}
int m=(l+r)>>;
pushdown(l,r,rt);
if(R<=m) update(l,m,rt<<,L,R,c);
else if(L>m) update(m+,r,rt<<|,L,R,c);
else
{
update(l,m,rt<<,L,m,c);
update(m+,r,rt<<|,m+,R,c);
}
pushup(rt);
}
ll query(int l,int r,int rt,int L,int R)
{
if(l==L && r==R)
{
return sq[rt];
}
int m=(l+r)>>;
pushdown(l,r,rt);
if(R<=m) return query(l,m,rt<<,L,R);
else if(L>m) return query(m+,r,rt<<|,L,R);
else return query(l,m,rt<<,L,m)+query(m+,r,rt<<|,m+,R);
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
build(,n,);
while(m--)
{
int op,a,b,c;
scanf("%d",&op);
if(op==)
{
scanf("%d%d%d",&a,&b,&c);
update(,n,,a,b,c);
}
else
{
scanf("%d%d",&a,&b);
printf("%lld\n",query(,n,,a,b));
}
}
}
return ;
}

[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. [DP] LGTB 玩THD (复杂状态DP)

    LGTB 玩THD LGTB 最近在玩一个类似DOTA 的游戏名叫THD有一天他在守一座塔,对面的N 个小兵排成一列从近到远站在塔前面每个小兵有一定的血量hi,杀死后有一定的金钱gi每一秒,他都可以攻 ...

  2. I/O继承关系图

    InputStream/OutputStream继承关系图

  3. Json概述以及python对json的相关操作《转》

    什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...

  4. jquery <li>标签 隔若干行 加空白或者加虚线

    $(function () { $('ul li').addClass(function (i) { return i % 6 == 5 ? "ab" : "" ...

  5. 如何使用ERStudio 生成comment

    在ER使用中,在生成sql过程中,如何批量生成字段描述,如何批量添加Owner,请看下文: 1.ER生成字段描述 2.ER生成描述添加Owner 使用的ER版本是8.0,英文版本,在操作过程中,有些配 ...

  6. httpd.ini

    [ISAPI_Rewrite]CacheClockRate 3600RepeatLimit 32RewriteRule ^(.*)/plus/list-tid-([0-9]+)\.html$ $1/p ...

  7. Chrome 浏览器各版本下载大全

    随着最近64位版本的 Chrome 浏览器正式版的推出,Chrome 浏览器再次受到广大浏览迷的重点关注,今天我们就整理一下各版本的 Chrome 浏览器 32位及64位的下载地址,方便各位浏览迷选择 ...

  8. 映像备份与恢复管理工具Easy Image X使用说明

    Easy Image X(简称EIX)是一个支持Ghost映像(.gho)和ImageX映像(.wim)的映像管理工具,具有友好的图形界面,仅需几步简单操作即可完成映像备份与恢复工作.维护时使用最多的 ...

  9. 关于新的man版本出现“无法解析 /usr/share/man/zh_CN/man1/ls.1.gz: 没有那个文件或目录“

    今天学习了下man,有关详细资料参考:http://www.cnblogs.com/hnrainll/archive/2011/09/06/2168604.html toor@door:/usr/sh ...

  10. Linux fdisk 命令

    Linux fdisk 命令 fdisk                         fdisk功能说明:磁盘分区.语 法:fdisk [-b <分区大小>][-uv][外围设备代号] ...