博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树状数组模板题 P1904
阅读量:4359 次
发布时间:2019-06-07

本文共 1245 字,大约阅读时间需要 4 分钟。

Description

给定一个长度为n的整数数组A[1]、A[2]、…、A[n](-10^9<=A[i]<=10^9),和m个操作: 操作1:1 i x 把A[i]的值增加x(-10^3<=A[i]<=10^3); 操作2:2 i j 查询当前序列的连续子序列A[i]..A[j]的和。

Input

第一行包含两个整数n和m,表示数组有n个元素,m表示有m个操作;接下来的一行包含n个整数,第i个整数表示A[i];再接下来的m行,每行表示一个操作。

Output

按输入顺序输出操作2的结果。

Hint

反正要用long long

Solution

嗯,这个题,告诉我们,位运算要打括号。。。
#include
#include
#include
#include
#define maxn 100005#define lowbit(x) (x&(-x))using namespace std;long long c[maxn];long long n,m,z,u,z2,ans1,ans2,ans;void doadd(long long x,long long y){ while(x<=n){ c[x]=c[x]+y; x=x+lowbit(x); }}long long sets(long long x){ long long s=0; while(x>0){ s+=c[x]; x-=lowbit(x); } return s;}int main(){ scanf("%lld%lld",&n,&m); for(int i=1;i<=n;i++){ scanf("%lld",&z); doadd(i,z); } for(int j=1;j<=m;j++){ scanf("%lld",&u); if(u==1){ scanf("%lld%lld",&z2,&z); doadd(z2,z); } else{ scanf("%lld%lld",&z2,&z); ans1=sets(z); ans2=sets(z2-1); ans=ans1-ans2; printf("%lld\n",ans); } } return 0;}

转载于:https://www.cnblogs.com/virtual-north-Illya/p/10045147.html

你可能感兴趣的文章
JavaScript原生错误及检测
查看>>
最小权限的挑战
查看>>
jquery 视觉特效(水平滚动图片)
查看>>
SVG笔记
查看>>
linux下使用dd命令写入镜像文件到u盘
查看>>
物联网架构成长之路(8)-EMQ-Hook了解、连接Kafka发送消息
查看>>
2018-2019-1 20165234 20165236 实验二 固件程序设计
查看>>
IDEA的GUI连接数据库写入SQL语句的问题总结
查看>>
Xpath在选择器中正确,在代码中返回的是空列表问题
查看>>
leecode第一百九十八题(打家劫舍)
查看>>
【BZOJ 1233】 [Usaco2009Open]干草堆tower (单调队列优化DP)
查看>>
07-3. 数素数 (20)
查看>>
写一个欢迎页node统计接口Py脚本(邮件,附件)-py
查看>>
计算两个日期之间的天数
查看>>
Android关于buildToolVersion与CompileSdkVersion的区别
查看>>
袋鼠云日志,日志分析没那么容易
查看>>
缓存穿透 缓存雪崩 缓存并发
查看>>
了解你的Linux系统:必须掌握的20个命令
查看>>
js setInterval 启用&停止
查看>>
knockoutJS学习笔记04:监控属性
查看>>