2340单点修改、区间查询
2340单点修改、区间查询
⭐️难度:中等
🌟考点:线段树
📖
📚
import java.util.Scanner;
public class Main {
static int N = 100010;
static int n;
static int[] c = new int[N];
static int lowbit(int x){ // 求loubit
return x & -x;
}
static void add(int x,int v){ // 单点修改
for (int i = x; i <= n ; i+=lowbit(i)) {
c[i] += v;
}
}
static int sum(int x){ // 区间查询
int res = 0 ;
for(int i = x;i > 0;i-=lowbit(i)){
res += c[i];
}
return res;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for (int i = 1; i <= n; i++) {
add(i,sc.nextInt()); // 初始化直接调用单点修改
}
int m = sc.nextInt();
while(m-->0){
int t = sc.nextInt();
if(t == 1){ // 单点修改
int x = sc.nextInt();
int a = sc.nextInt();
add(x,a);
}else if(t == 2){ // 区间查询
int l = sc.nextInt();
int r = sc.nextInt();
System.out.println(sum(r) - sum(l - 1)); // 差分求和
}
}
}
}