|
| 1 | +package IndexedTree.P12837; |
| 2 | + |
| 3 | +import java.io.*; |
| 4 | +import java.util.*; |
| 5 | + |
| 6 | +public class Main { |
| 7 | + |
| 8 | + static int N, Q; |
| 9 | + static long[] segTree; |
| 10 | + |
| 11 | + public static void main(String[] args) throws Exception { |
| 12 | + System.setIn(new FileInputStream("src/IndexedTree/P12837/input.txt")); |
| 13 | + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); |
| 14 | + StringTokenizer st = new StringTokenizer(br.readLine()); |
| 15 | + |
| 16 | + N = Integer.parseInt(st.nextToken()); |
| 17 | + Q = Integer.parseInt(st.nextToken()); |
| 18 | + |
| 19 | + segTree = new long[(int) Math.pow(2, Math.ceil(Math.log(N) / Math.log(2)) + 1)]; |
| 20 | + StringBuilder sb = new StringBuilder(); |
| 21 | + while (Q-- > 0) { |
| 22 | + st = new StringTokenizer(br.readLine()); |
| 23 | + int cmd = Integer.parseInt(st.nextToken()); |
| 24 | + int p1 = Integer.parseInt(st.nextToken()), p2 = Integer.parseInt(st.nextToken()); |
| 25 | + |
| 26 | + if (cmd == 1) query1(1, 1, N, p1, p2); |
| 27 | + else sb.append(query2(1, 1, N, p1, p2)).append("\n"); |
| 28 | + } |
| 29 | + System.out.println(sb.toString()); |
| 30 | + } |
| 31 | + |
| 32 | + static void query1(int node, int start, int end, int p, int x) { |
| 33 | + if (start <= p && p <= end) { |
| 34 | + if (start == end) segTree[node] += x; |
| 35 | + else { |
| 36 | + query1(node*2, start, (start+end)/2, p, x); |
| 37 | + query1(node*2+1, (start+end)/2+1, end, p, x); |
| 38 | + segTree[node] = segTree[node*2] + segTree[node*2+1]; |
| 39 | + } |
| 40 | + } |
| 41 | + } |
| 42 | + |
| 43 | + static long query2(int node, int start, int end, int p, int q) { |
| 44 | + if (q < start || end < p) return 0; |
| 45 | + if (p <= start && end <= q) return segTree[node]; |
| 46 | + return query2(node*2, start, (start+end)/2, p, q) |
| 47 | + + query2(node*2+1, (start+end)/2+1, end, p, q); |
| 48 | + } |
| 49 | +} |
0 commit comments