[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 3
- 样例输出
-
- 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 ;
- }
- 5
[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个村庄的每个村庄一次,没有回路或交叉,任 ...
随机推荐
- c++ 继承学习笔记
三大继承原则(由我杜撰) 基类的私有成员被继承后不可见(优先级最高) 公有继承不改变基类成员属性 保护继承(私有继承)把基类成员变为保护成员(私有成员)
- How to enable $Admin Shares in Windows 7
Quote from: http://www.wintips.org/how-to-enable-admin-shares-windows-7/ As “Administrative shares” ...
- 在Windows下用Mingw 4.5.2编译X264
1.下载mingw-get-inst-20110530.rar(http://www.baidu.com/link?url=-ixXW6QiuEl8CA1dKudoWCxzcTvxrpQ0nXRBHU ...
- 构造函数为什么不能是虚函数 ( 转载自C/C++程序员之家)
从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的.问题出来了,如果构造函数是虚的,就需要通过 vtable来调用, ...
- remastersys修改默认选项
1.vim /etc/remastersys/isolinux/isolinux.cfg.vesamenu default vesamenu.c32prompt 0timeout 100 menu t ...
- Putty终端 模拟 远程登录 虚拟机Linux
1.虚拟机设置 虚拟机设置->网络适配器->选择Host-only:与主机共享一个私有网络 桥接.NAT.Host-only三种网络模式的说明: (1)桥接:表示在局域网内是一台真实的系统 ...
- css文本换行你所不知道的技巧
前言:这是最近翻译的一篇文章 我在header标签开头忘里边加入一个span标签的时候,有一点小问题.我总是想确保在span标签之前能够换行.明确地讲,在标签前边加入<br> 并没有什么错 ...
- firemonkey 得到屏幕信息
type TO_MONITOR = class hm: HMONITOR; end; function EnumMonitorsProc(hm: HMONITOR; dc: HDC; r: PRect ...
- 学会Twitter Bootstrap不再难
Twitter Bootstrap 3.0 是对其过去的重大改变,现在它更偏向于移动应用的框架,并且宣称是最好的web设计css框架之一,的确如此. 可能有人曾经使用过Twitter Bootstra ...
- 2016031901 - ubuntu15.1安装驱动
个人使用u盘安装的ubuntu15.1,安装后找不到无线,主要是驱动没有安装的问题. 解决方案如下: 01.wife无法找到 02.pool文件夹内都是驱动,我们需要的网络驱动也在内 03.网络驱动包 ...