未解决的树状数组差分(改变区间,求单点值)
Posted sc-pyt-2021-theworld
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未解决的树状数组差分(改变区间,求单点值)相关的知识,希望对你有一定的参考价值。
// luogu-judger-enable-o2 #include <bits/stdc++.h> #define inf 500001 #define lll long long int using namespace std; long c[inf],a,n,m,k,xx,nn; int lowbit(int x){ return x&(-x);//求X二进制下从右到左第一个1的所对应的十进制下的值 } void update(int x,int y){//update添加修改之意 while(x<=n){ c[x]+=y;//c[i]树状数组 x+=lowbit(x); } } int sum(int x){ int sm=0; while(x>0){ sm+=c[x]; x-=lowbit(x);//注意顺序不能颠倒 } return sm; } int main(){ ios::sync_with_stdio(0); scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a); update(i,a-nn); nn=a; } for(int i=1;i<=m;i++){ scanf("%d",&k); int aa,bb,cc; if(k==1){ scanf("%d %d %d",&aa,&bb,&cc); update(aa,cc); update(bb+1,-cc); } if(k==2){ scanf("%d",&aa); printf("%d ",sum(aa)); } } return 0; }
以上是关于未解决的树状数组差分(改变区间,求单点值)的主要内容,如果未能解决你的问题,请参考以下文章