[OpenJudge] 平方和
平方和
总时间限制: 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] 平方和的更多相关文章
- 【OpenJudge 8463】Stupid cat & Doge
http://noi.openjudge.cn/ch0204/8463/ 挺恶心的一道简单分治. 一开始准备非递归. 大if判断,后来发现代码量过长,决定大打表判断后继情况,后来发现序号不对称. 最后 ...
- 【OpenJudge 191】【POJ 1189】钉子和小球
http://noi.openjudge.cn/ch0405/191/ http://poj.org/problem?id=1189 一开始忘了\(2^{50}\)没超long long差点写高精度Q ...
- 【OpenJudge 1665】完美覆盖
http://noi.openjudge.cn/ch0405/1665/?lang=zh_CN 状压水题,手动转移 #include<cstdio> #include<cstring ...
- 【OpenJudge 1793】矩形覆盖
http://noi.openjudge.cn/ch0405/1793/ 好虐的一道题啊. 看数据范围,一眼状压,然后调了好长时间QwQ 很容易想到覆盖的点数作为状态,我用状态i表示至少覆盖状态i表示 ...
- OpenJudge 2990:符号三角形 解析报告
2990:符号三角形 总时间限制: 1000ms 内存限制: 65536kB 描述 符号三角形的第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“ ...
- AC日记——与7无关的数 openjudge 1.5 39
39:与7无关的数 总时间限制: 1000ms 内存限制: 65536kB 描述 一个正整数,如果它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数.现求所有小于等于n( ...
- noi题库(noi.openjudge.cn) 1.5编程基础之循环控制T36——T45
T36 计算多项式的值 描述 假定多项式的形式为xn+xn-1+-+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值. 输入 输入仅一行,包括x和n,用单个空格隔开.x在flo ...
- hdu 2007 - 平方和与立方和
题目大意: 给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和. 解答: 坑你没商量!要考虑输入数a,b的大小.如果a>b,需要交换a,b的值. 1: #include<s ...
- OpenJudge 7624 山区建小学
在openjudge似乎无法凭题号搜到题...? 总时间限制: 1000ms 内存限制: 65536kB 描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任 ...
随机推荐
- mysql innodb 数据打捞(二)innodb 页面打捞编程
有了页面的结构和特征,需要编程实现数据库页面的打捞工作: 为了方便windows and linux 的通用,计划做成C语言的控制台应用,并且尽量只用ansi c;关于多线程,计划做成多线程的程序,最 ...
- iOS 分类思想(1)
1.需求:如果对一个类在不更改代码的基础上要为它再扩充额外的方法可以使用继承和分类 2.分类 作用:可以在不修改原来类代码的基础上,给某一个类扩充一些对象方法或者类方法,因此一个类可以有多个分类 实现 ...
- rest和soap_笔记
Web 服务编程,REST 与 SOAP http://www.ibm.com/developerworks/cn/webservices/0907_rest_soap/ Web 服务编程,REST ...
- 替换a链接的href和title
新项目准备验收,客户检测网页有安全隐患,说是当前网页使用“http://”有风险,指定外部链接不用“http://”怎么整…… 后来想到用JS替换字符串去操作,找了半天总算找到合用的,最终是用JQ去更 ...
- 一个简单的WebService实例
WebService在.NET平台下的作用是在不同应用程序间共享数据与数据交换. 要达到这样的目标,Web services要使用两种技术: XML(标准通用标记语言下的一个子集):XML是在web上 ...
- PHP学习心得(四)——基本语法
从 HTML 中分离 当 PHP 解析一个文件时,会寻找开始和结束标记,标记告诉 PHP 开始和停止解释其中的代码.此种方式的解析可以使 PHP 嵌入到各种不同的文档中,凡是在一对开始和结束标记之外的 ...
- Distributed R
R语言的分布式目前有这几个产品: (A)RHadoop:对hadoop族系的产品,其中提供了以下的组件 A.1 rhdfs 浏览读取增加修改hdfs上面的文件数据: A.2 rhbase 浏览读取增 ...
- Pycharm使用技巧
1.代码配色,即主题 pycharm自带的配色方案都很难看,网上的配色方案又很难看,所以根据其他ide的Monokai配色方案,自己定义了一个. pycharm Monokai主题下载:http:// ...
- uCGUI窗口重绘代码分析
一.概述 µC/GUI的窗口重绘是学习者理解窗口工作原理和应用窗口操作的重点.µC/GUI的窗口重绘引入了回调机制,回调机制可以实现图形系统调用用户的代码,由于图形系统使用了剪切算法,使得屏幕重绘的效 ...
- “0x5003eaed” 指令引用的“0x00000000”内存。该内存不能为“read”
一.问题描述与原因分析 1.问题描述 使用VC6.0,在工具栏点击“打开文件”或者“添加文件到项目”的图标时,提示如题的错误. 2.原因分析 微软的VC6.0与office2007冲突问题. 二.解决 ...