洛谷 P3368 树状数组【模板2】
2018-02-26 09:34
183 查看
这次是区间加值,但是不要慌,可以水过
用了一个差分数组的思想
之后你会发现,某个区间加值
比方说
原数组<0,1,3,6,10>
差分数组中的状态<1,2,3,4>
原数组每个值加二,差分数组中元素除第一位及末位+1位发生了变化,其他没有变化,所以只需要修改差分数组中的修改区间第一位及末位+1位即可
代码
//By Acer.mo
#include<iostream>
#include<cstdio>
using namespace std;
const int maxa=10000000;
int a[maxa+10]={0};//初始的存储数组
int l_b[maxa+10]={0};//树状数组
int n,i,j,m;
int lowbit(int x)//求x的lowbit值
{
return x&-x;
}
void add(int k,int num)//lowb丢值函数 /构建树形 /后期单点加值
{
for(;k<=n;k+=lowbit(k))//将lowb数组中所有包含第k位数的位置加上num
l_b[k]+=num;
// cf[k]+=num;
}
int query(int x)//求第x位数的derta
{
int sum=0;
for (;x;x-=lowbit(x))
{
sum+=l_b[x];
}
return sum;
}
int main()
{
scanf("%d %d",&n,&m);
for (i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int s,b,c,d;
while (m--)
{
scanf("%d",&s);
if (s==1)
{
scanf("%d %d %d",&d,&b,&c);
add(d,c);//区间的始端加c
add(b+1,-c);//区间末端的下一位减c
}
else
{
scanf("%d",&d);
cout<<query(d)+a[d]<<endl; //变化量加起始量
}
}
return 0;
}//树状数组维护差分数组
用了一个差分数组的思想
之后你会发现,某个区间加值
比方说
原数组<0,1,3,6,10>
差分数组中的状态<1,2,3,4>
原数组每个值加二,差分数组中元素除第一位及末位+1位发生了变化,其他没有变化,所以只需要修改差分数组中的修改区间第一位及末位+1位即可
代码
//By Acer.mo
#include<iostream>
#include<cstdio>
using namespace std;
const int maxa=10000000;
int a[maxa+10]={0};//初始的存储数组
int l_b[maxa+10]={0};//树状数组
int n,i,j,m;
int lowbit(int x)//求x的lowbit值
{
return x&-x;
}
void add(int k,int num)//lowb丢值函数 /构建树形 /后期单点加值
{
for(;k<=n;k+=lowbit(k))//将lowb数组中所有包含第k位数的位置加上num
l_b[k]+=num;
// cf[k]+=num;
}
int query(int x)//求第x位数的derta
{
int sum=0;
for (;x;x-=lowbit(x))
{
sum+=l_b[x];
}
return sum;
}
int main()
{
scanf("%d %d",&n,&m);
for (i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int s,b,c,d;
while (m--)
{
scanf("%d",&s);
if (s==1)
{
scanf("%d %d %d",&d,&b,&c);
add(d,c);//区间的始端加c
add(b+1,-c);//区间末端的下一位减c
}
else
{
scanf("%d",&d);
cout<<query(d)+a[d]<<endl; //变化量加起始量
}
}
return 0;
}//树状数组维护差分数组
相关文章推荐
- 【模板】树状数组 区间修改,区间求和 (模板题:洛谷P3368树状数组2)
- 洛谷——P3374 【模板】树状数组 1
- P3368 【模板】树状数组 2(树状数组维护差分序列)
- 洛谷 P3374【模板】树状数组 1
- 洛谷P3374 【模板】树状数组 1(CDQ分治)
- 树状数组简介(洛谷P3368、P3374)
- 洛谷P3380 【模板】二逼平衡树(树套树,树状数组,线段树)
- 洛谷 3380 【模板】二逼平衡树(树状数组套权值线段树)
- 洛谷 P3374 【模板】树状数组 1
- 树状数组模板
- POJ2352-Stars(树状数组模板)
- 【模板】树状数组 1
- UESTC 838 —— 母仪天下(树状数组模板)
- 洛谷P3368 【模板】树状数组 2
- 树状数组 模板
- 树状数组 二维偏序【洛谷P3431】 [POI2005]AUT-The Bus
- 二维树状数组模板(1892)
- 树状数组模板
- 树状数组模板
- 树状数组-模板