/**
* 树状数组1:
* 单点更新,单点查询
* 题目链接:https://www.luogu.com.cn/problem/P3374
*/importjava.util.ArrayList;importjava.util.List;importjava.util.Scanner;publicclassMain{staticint n, m ;staticint x, y, z ;staticint[] c =newint[5000000];staticList<Integer> list =newArrayList<>();publicstaticvoidmain(String[] args){Scanner input =newScanner(System.in);
n = input.nextInt();
m = input.nextInt();for(int i=1; i<=n; i++){int a = input.nextInt();update(a, i);}for(int i=1; i<=m; i++){
x = input.nextInt();
y = input.nextInt();
z = input.nextInt();if(x ==1){update(z, y);}if(x ==2){
list.add(query1(z)-query1(y-1));}}for(int i=0; i<list.size(); i++){System.out.println(list.get(i));}}privatestaticintquery1(int i){int ans =0;while(i>0){
ans += c[i];
i -=lowbit(i);}return ans ;}privatestaticvoidupdate(int a,int i){while(i<=n){
c[i]+= a;
i +=lowbit(i);}}privatestaticlonglowbit(int i){return i &(-i);}}
/**
* 树状数组2
* 区间更新,单点查询
* 题目链接:https://www.luogu.com.cn/problem/P3368
*/importjava.util.Scanner;publicclassMain{staticintN,M;staticint[] c =newint[5000000];publicstaticvoidmain(String[] args){Scanner input =newScanner(System.in);N= input.nextInt();M= input.nextInt();int now , last =0;for(int i=1; i<=N; i++){
now = input.nextInt();updates(i, now-last);//构造差分树状数组
last = now ;}for(int i=0; i<M; i++){int a = input.nextInt();if(a ==1){int x = input.nextInt();int y = input.nextInt();int k = input.nextInt();updates(x, k);updates(y+1,-k);}if(a ==2){int x = input.nextInt();System.out.println(query(x));}}}privatestaticlongquery(int x){long ans =0;while(x>0){
ans += c[x];
x -=lowbits(x);}return ans ;}privatestaticvoidupdates(int i,int a){while(i<=N){
c[i]+= a ;
i +=lowbits(i);}}privatestaticlonglowbits(int i){return(-i)& i ;}}
importjava.util.Scanner;/**
* 校门外的树
* 题目链接:https://loj.ac/p/10115
*
*/publicclassMain{staticint n, m ;staticint[] c1 =newint[50010];staticint[] c2 =newint[50010];publicstaticvoidmain(String[] args){Scanner input =newScanner(System.in);
n = input.nextInt();
m = input.nextInt();for(int i=1; i<=m; i++){int k = input.nextInt();int x = input.nextInt();int y = input.nextInt();if(k==1){add(c1, x);//c1数组记录左括号的个数add(c2, y);//c2数组记录右括号的个数}if(k==2){System.out.println(query(c1, y)-query(c2, x-1));}}}privatestaticlongquery(int[] c,int i){long ans =0;while(i>0){
ans += c[i];
i -=lowbit(i);}return ans ;}privatestaticvoidadd(int[] c,int i){while(i<=n){
c[i]++;
i +=lowbit(i);}}privatestaticlonglowbit(int i){return(-i)& i ;}}
树状数组求区间和例题练习(Java实现)题目链接地址戳这里!/** * 树状数组1: * 单点更新,单点查询 * 题目链接:https://www.luogu.com.cn/problem/P3374 */import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main { static int n, m ; static int x, y, z ;