题目背景

题目描述(本题是提高组第二题难度+)

题目描述

\(LJJ\)又要开始上数学课啦!(\(T1\),永恒不变的数学)

\(LJJ\)的\(Teacher\)对上次的考试很不满意(其实是出题人对上次的分数那么高不满意啦),决定在出一道难(\(water\))题。


\(LJJ\)的\(Teacher\)给了\(LJJ\)一个数列,但这由于是\(LJJ\)的\(Teacher\)发明的,我们不称呼他为\(LJJ\)数列,而称他为\(Teacher\)数列。但是\(LJJ\)还停留在数数的阶段啊,所以不能太难。


于是\(LJJ\)的\(Teacher\)随便给出了一个\(Teacher\)数列。

Teacher会对这个数列进行两个操作:

1:将其中的一个数加上s(s为整数)

2:Teacher会给出left和right,让你求:

a[left](right-left+1) + a[left+1](right-left)

  • ...... + a[right-1]2 + a[right]1 的值。

\(LJJ\)的指头掰不过来了呀,就请您来完成啦~

输入输出格式

输入格式:

第一行有\(2\)个数\(n,q\),分别表示\(Teacher\)数列中数的个数以及操作次数。

接下来的一行有\(n\)个数,第\(i\)个数表示\(a[i]\)。

再接下来\(q\)行,每行三个数;第一个数是\(order\)。如果\(order=1\),那么接下来两个数:\(x, s\),即把\(a[x]\)加上\(s\);如果\(order=2\),那么接下来两个数:\(left, right\),即求这一段区间\(LJJ\)要求的答案。

注意:\(Teacher\)数列中的数并不一定都是正数,但一定都是整数。

输出格式:

对于每一个询问\((order=2)\)输出所求答案

输入输出样例

输入样例#1:

5 3
2 4 1 3 5
2 2 4
1 2 3
2 2 4

输出样例#1:

17
26

说明

数据范围

\(n \leq 100000, q \leq 100000\),保证答案不超过\(long\) \(long\) (\(int64\)) 范围,保证数据有梯度

样例解释

\(4*3+1*2+3*1=17\)

\(7*3+1*2+3*1=26\)

提示 \(1\).如果看不懂题目,那么看这里:给你一段数列,有两种操作,单点修改和区间查询。查询\(left\)到\(right\),返回的值是

\(a[left]*(right-left+1)+a[left+1]*(right-left)+...+a[right]*1\)。

2.从另一个角度去想问题,把区间答案划分开来,否则你会打得很累。

3.题目中说是单点修改,而不是区间修改,有没有觉得简单得不可思议呢?

思路:把题目给的式子化一化,提出后面的\(right-1\),变成\(a_{i}*(right+1)-a_{i}*i\),整个式子变成\(\sum_{}(a_{i}*(right+1)-a_{i}*i)\),用树状数组所以维护\(a_{i}*i\)和普通的加法和就好了。

代码:

#include<cstdio>
#include<cctype>
#define maxn 100007
#define lb(x) x&(-x)
#define ll long long
using namespace std;
ll n,m,a[maxn],b[maxn];
inline ll qread() {
char c=getchar();ll num=0,f=1;
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) num=num*10+c-'0';
return num*f;
}
inline void add(ll x, ll w) {
ll p=x*w;
while(x<=n) {
a[x]+=w;
b[x]+=p;
x+=lb(x);
}
}
inline ll csum1(ll x) {
ll ans=0;
while(x) {
ans+=a[x];
x-=lb(x);
}
return ans;
}
inline ll csum2(ll x) {
ll ans=0;
while(x) {
ans+=b[x];
x-=lb(x);
}
return ans;
}
int main() {
n=qread(),m=qread();
for(ll i=1,x;i<=n;++i) {
x=qread();
add(i,x);
}
for(ll i=1,k,l,r;i<=m;++i) {
k=qread(),l=qread(),r=qread();
if(k==1) add(l,r);
else printf("%lld\n",(r+1)*(csum1(r)-csum1(l-1))-csum2(r)+csum2(l-1));
}
return 0;
}

洛谷P2826 LJJ的数学课的更多相关文章

  1. 洛谷P2826 [USACO08NOV]光开关Light Switching [2017年6月计划 线段树02]

    P2826 [USACO08NOV]光开关Light Switching 题目描述 Farmer John tries to keep the cows sharp by letting them p ...

  2. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  3. 洛谷 P1783 海滩防御 解题报告

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  4. 洛谷 P1783 海滩防御

    题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭.于是,WLP动用了他 ...

  5. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  6. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  7. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  8. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  9. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

随机推荐

  1. I2C Bus

    概述: I²C 是Inter-Integrated Circuit的缩写,发音为"eye-squared cee" or "eye-two-cee" , 它是一 ...

  2. asp.net C#操作存储过程读取存储过程输出参数值

    这段时间在做一个价格平台的项目时候,同事让我写一个存储过程.该存储过程是根据查询条件得出一组新数据,并且返回该组数据的总条数,此处的存储过程我用到了分页,其中主要知识点和难点是之前做项目的时候没有用到 ...

  3. Python selenium 三种等待方法

    1. 强制等待 sleep(xx) 是最简单粗暴的一种办法,不管你浏览器是否加载完了,程序都得等待3秒,3秒一到,继续执行下面的代码,作为调试很有用,不建议总用这种等待方式,严重影响程序执行速度. 代 ...

  4. 问题:C#调webservice超时;结果:C#调用webservice服务超时

    C#调用WebService服务时,报错,The operation has timed out,意思是“操作超时”. 方法/步骤 首先修改服务端配置 WebService服务所在站点为服务端,它提供 ...

  5. CSS3新增的伪类

    Element1 ~ element2:选择前面有element1的所有element2元素 [attr ^= val] 属性值以val开头的元素 [attr $= val] 属性值以val结尾的元素 ...

  6. [413D][搜索]D - Field expansion

    http://codeforces.com/contest/799/problem/D 解题关键:因为3^11>100000,所以若只把2单独拿出,最多只需要暴力2^11次,故只需要dfs一下即 ...

  7. 用JSP输出Hello World

    ------------------siwuxie095                             在 Eclipse 的 Package Explorer,右键->New-> ...

  8. 第三篇elasticsearch分布式安装

    elasticSearch 分布式安装 1.在elasticSearch下的config下elasticsearch.yml文件最后一行添加注意 一定要加空格在:后面cluster.name: wal ...

  9. if if 和 if elif 的区别

    再一次编程中意外使用了if if 也实现了 if elif的功能,所以搜索了下其中的区别: 1.if if 和 if elif 是有区别的,只是在某些情况下才会一样的效果: 2.随意使用会导致意外的错 ...

  10. iOS开发中,修改ASIHTTPRequest源码,禁止在POST时URL编码

    通过ASIHTTPRequest库进行POST时,会对POST的文本内容进行encodeURL,而且ASIHTTPRequest自身并没有配置项可以关闭这个转换. 本文提供一个方法关闭encodeUR ...