洛谷P2826 LJJ的数学课
题目背景
题目描述(本题是提高组第二题难度+)
题目描述
\(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的数学课的更多相关文章
- 洛谷P2826 [USACO08NOV]光开关Light Switching [2017年6月计划 线段树02]
P2826 [USACO08NOV]光开关Light Switching 题目描述 Farmer John tries to keep the cows sharp by letting them p ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷 P1783 海滩防御 解题报告
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷 P1783 海滩防御
题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭.于是,WLP动用了他 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
随机推荐
- hdu-5637 Transform(位运算+bfs)
题目链接: Transform Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- Oracle12c多租户如何启动关闭CDB或PDB (PDB自动启动)
Oracle 数据库 12 c 中介绍了多租户选项允许单个容器数据库 (CDB) 来承载多个单独的可插拔数据库 (PDB).下面我们一起来启动和关闭容器数据库 (CDB) 和可插拔数据库 (PDB). ...
- Guava手记
Cache Guava的Cache封装的功能比较全面,但是很多地方和设想的不太一样,最明显的就是RemovalListener,它并不是invalid之后就会被调用,因为在调用Cache的invali ...
- fabric差异化部署mysql和lnmp
1.代码如下: vim lnmp.py ------------------------------------------> #!/usr/bin/env python from fabric ...
- centos MAC 地址与报错eth0 unknown interface no such device
eth0 unknown interface no such device 出现这个原因是由于虚拟机直接COPY过来,MAC地址发生了变化,但eth0 里仍然记录着旧的MAC地址. 解决方法: vim ...
- centos6.x禁用ipv6的方法
注意可能有两个网卡的情况,修改当前网卡才有效. cd /etc/sysconfig/network-scripts/ ls ifcfg-Auto_eth0 ifcfg-eth0 现在ipv6没流行,几 ...
- crontab简易入门
前言 crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比 ...
- sklearn保存模型
# View more python tutorials on my Youtube and Youku channel!!! # Youtube video tutorial: https://ww ...
- Coding CTO 孙宇聪:《人,技术与流程》
我先做一下自我介绍,我是 07 年加入的 Google,在 Moutain View 总部任Google SRE,今年年初回国加入 Coding . 在 Google 我参与了两个 Project, ...
- .Net开发中的@ 和 using 使用技巧
一.@符号的妙用 1.可以作为保留关键字的标识符 C#规范当中,不允许使用保留关键字(class.bool等)当作普通的标识符来命名,这时候@符号作用就体现 出来了,可以通过@符号前缀把这些保留关键字 ...