P3368 【模板】树状数组 2(区间增减,单点查询)
P3368 【模板】树状数组 2
题目描述
如题,已知一个数列,你需要进行下面两种操作:
1.将某区间每一个数数加上x
2.求出某一个数的和
输入输出格式
输入格式:
第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。
第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。
接下来M行每行包含2或4个整数,表示一个操作,具体如下:
操作1: 格式:1 x y k 含义:将区间[x,y]内每个数加上k
操作2: 格式:2 x 含义:输出第x个数的值
输出格式:
输出包含若干行整数,即为所有操作2的结果。
输入输出样例
5 5
1 5 4 2 3
1 2 4 2
2 3
1 1 5 -1
1 3 5 7
2 4
6
10
说明
时空限制:1000ms,128M
数据规模:
对于30%的数据:N<=8,M<=10
对于70%的数据:N<=10000,M<=10000
对于100%的数据:N<=500000,M<=500000
样例说明:
故输出结果为6、10
#include<iostream>
using namespace std; const int N = ; int n,m,a;
int ch,x,y,v;
int sum[N];//树状数组 int lowbit(int x)
{
return x&(-x);
} void update(int p,int v) //将第P个数增加v
{
while(p<=n)
{
sum[p] += v;
p += lowbit(p);
}
} int query(int p) //查询第p个点的值是多少
{
int ans=;
while(p)
{
ans += sum[p];
p -= lowbit(p);
}
return ans;
} int main()
{
ios::sync_with_stdio(false) ;
cin>>n>>m;
int last=;
for (int i=;i<=n;i++)
{
cin>>a;
update(i,a-last); //建树
last = a;
/*
这里运用了差分思想,假设原本的数据存在a数组中,
那么c数组储存的就是c[i]=a[i]-a[i-1],如果c[1]=a[1],那么很明显
a[i]=c[i]+c[i-1]+c[i-2]+...+c[2]+c[1].
这样我们每次单点查询的时候只要加上c数组的前缀就可以了。
*/
}
for (int i=;i<=m;++i)
{
cin>>ch;
if (ch==) //区间修改
{
cin>>x>>y>>v;
update(x,v);
update(y+,-v);
}
if (ch==) //单点查询
{
cin>>x;
cout<<query(x)<<endl;
}
}
return ;
}
更新模板
#include<cstdio>
int sum[];
int n,m,last = ; void update(int p,int v) {
for (; p<=n; p+=p&(-p)) sum[p] += v;
}
int query(int p) {
int ans = ;
for (; p; p-=p&(-p)) ans += sum[p];
return ans;
} int main()
{
scanf("%d%d",&n,&m);
for (int a,i=; i<=n; ++i)
{
scanf("%d",&a);
update(i,a-last);
last = a;
}
for (int x,y,z,a,i=; i<=m; ++i)
{
scanf("%d",&a);
if (a==) //区间修改
{
scanf("%d%d%d",&x,&y,&z);
update(x,z);
update(y+,-z);
}
else //单点查询
{
scanf("%d",&x);
printf("%d\n",query(x));
}
}
return ;
}
P3368 【模板】树状数组 2(区间增减,单点查询)的更多相关文章
- hdu1556树状数组的区间更新单点查询
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 洛谷 P3368 【模板】树状数组 2(区间修改点查询)
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- POJ 2155 Matrix 【二维树状数组】(二维单点查询经典题)
<题目链接> 题目大意: 给出一个初始值全为0的矩阵,对其进行两个操作. 1.给出一个子矩阵的左上角和右上角坐标,这两个坐标所代表的矩阵内0变成1,1变成0. 2.查询某个坐标的点的值. ...
- poj3468树状数组的区间更新,区间求和
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 47174 ...
- 树状数组求区间和模板 区间可修改 参考题目:牛客小白月赛 I 区间
从前有个东西叫树状数组,它可以轻易实现一些简单的序列操作,比如单点修改,区间求和;区间修改,单点求值等. 但是我们经常需要更高级的操作,比如区间修改区间查询.这时候树状数组就不起作用了,只能选择写一个 ...
- 【树状数组】区间出现偶数次数的异或和(区间不同数的异或和)@ codeforce 703 D
[树状数组]区间出现偶数次数的异或和(区间不同数的异或和)@ codeforce 703 D PROBLEM 题目描述 初始给定n个卡片拍成一排,其中第i个卡片上的数为x[i]. 有q个询问,每次询问 ...
- [模板] 树状数组 (C++ class)
闲来无事(其实是打了两三道树状数组题),写了个树状数组模板…… /* Author: hotwords */ template<typename tp> class BinTree { p ...
- 【LuoguP3038/[USACO11DEC]牧草种植Grass Planting】树链剖分+树状数组【树状数组的区间修改与区间查询】
模拟题,可以用树链剖分+线段树维护. 但是学了一个厉害的..树状数组的区间修改与区间查询.. 分割线里面的是转载的: ----------------------------------------- ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 1010 YJJ's Salesman 【离散化+树状数组维护区间最大值】
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6447 YJJ's Salesman Time Limit: 4000/2000 MS (Java/O ...
- bzoj 2819 Nim dfn序+树状数组维护区间异或值
题目大意 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略 ...
随机推荐
- 密码加密MD5,Bash64
基于jar : org.apache.commons.codec 一.MD5概述:不可逆加密 Message Digest Algorithm MD5(中文名为消息摘要算法第 五版)为计算机安全领域广 ...
- [luogu1979] 华容道
题面 先讲点无关的,这道题是真的恶心... 好了,第一眼看到这道题,肯定是准备暴搜的,但是想了一想,省选难度的题目不可能一上来就让你暴搜吧,于是开启了无穷无尽的分析,我们不妨设指定棋子叫做移动 ...
- linq中当生成asp.net实体模式时
linq中当生成asp.net实体模式时 注意: 选中 工具->库程序包管理器->管理解决方案的nuget程序包 选中下面的进行下载.
- sudo 启动tomcat报错没有java环境
报错: Cannot find ./catalina.shThe file is absent or does not have execute permissionThis file is need ...
- BigDecimal.setScale用法总结
1. BigDecimal num1 = new BigDecimal(2.225667);//这种写法不允许,会造成精度损失 2. BigDecimal num2 = new BigDecimal( ...
- Git--查看,删除,添加远程分支
1. 查看远程分支: $ git branch -a 2. 删除远程分支: $ git push origin --delete <branch name> 或者 git push --d ...
- 404 Note Found 队-Alpha5
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- Qt串口接收使用多个LCD控件显示不同的数据
https://blog.csdn.net/qq_30976353/article/details/84836124 参考链接
- Mave实战(1)——Maven介绍
目录 1. Maven介绍 1.1. 何为Maven 1.1.1. Maven是优秀的构建工具 1.1.2. Maven不仅仅是构建工具 1. Maven介绍 1.1. 何为Maven Maven是一 ...
- 解决vscode换行光标跳转行首
这个问题是由于设置自动保存而造成的. 解决方法1:取消自动保存. 解决方法2:在首选项的设置里加上"files.autoSaveDelay": 10000,延迟一小会自动保存的时间 ...