线段树
懒标记和扫描线法
243. 一个简单的整数问题2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int N = 100010;
static int n, m;
static int[] w = new int[N];
static Node[] tr = new Node[N * 4];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s1 = br.readLine().split(" ");
n = Integer.parseInt(s1[0]);
m = Integer.parseInt(s1[1]);
String[] s2 = br.readLine().split(" ");
for (int i = 1; i <= n; i++) {
w[i] = Integer.parseInt(s2[i - 1]);
}
build(1, 1, n);
int l, r;
int d;
String op = "";
while (m-- > 0) {
String[] s3 = br.readLine().split(" ");
op = s3[0];
l = Integer.parseInt(s3[1]);
r = Integer.parseInt(s3[2]);
if (op.equals("C")) {
d = Integer.parseInt(s3[3]);
modify(1, l, r, d);
} else {
System.out.println(query(1, l, r));
}
}
}
private static void build(int u, int l, int r) {
if (l == r) {
tr[u] = new Node(l, r, w[r], 0);
} else {
tr[u] = new Node(l, r);
int mid = l + r >> 1;
build(u << 1, l, mid);
build(u << 1 | 1, mid + 1, r);
pushup(u);
}
}
private static void pushup(int u) {
tr[u].sum = tr[u