Skip to content

Commit 27712da

Browse files
authored
Merge pull request #752 from AlgorithmWithGod/JHLEE325
[20250827] BOJ / G1 / 구간 합 구하기 / 이준희
2 parents ffef2b0 + 1c6cb6e commit 27712da

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
7+
public static void main(String[] args) throws Exception {
8+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
9+
StringTokenizer st = new StringTokenizer(br.readLine());
10+
StringBuilder sb = new StringBuilder();
11+
12+
int n = Integer.parseInt(st.nextToken());
13+
int m = Integer.parseInt(st.nextToken());
14+
int k = Integer.parseInt(st.nextToken());
15+
16+
long[] arr = new long[n];
17+
long[] tree = new long[4*n];
18+
19+
for(int i=0;i<n;i++){
20+
arr[i] = Long.parseLong(br.readLine());
21+
}
22+
23+
init(arr,tree,1,0,n-1);
24+
25+
for(int i=0;i<m+k;i++){
26+
st = new StringTokenizer(br.readLine());
27+
int op = Integer.parseInt(st.nextToken());
28+
29+
if(op==1){
30+
int a = Integer.parseInt(st.nextToken());
31+
long b = Long.parseLong(st.nextToken());
32+
update(arr, tree, 1, 0, n-1, a-1,b);
33+
}
34+
else{
35+
int a = Integer.parseInt(st.nextToken());
36+
int b = Integer.parseInt(st.nextToken());
37+
38+
long sum = query(tree,1,0,n-1,a-1,b-1);
39+
40+
sb.append(sum+"\n");
41+
}
42+
}
43+
44+
System.out.println(sb.toString());
45+
}
46+
47+
static void init(long[] arr, long[] tree, int node, int start, int end){
48+
if(start == end){
49+
tree[node]=arr[start];
50+
}
51+
else{
52+
init(arr,tree,node*2,start,(start+end)/2);
53+
init(arr,tree,node*2+1,(start+end)/2+1,end);
54+
tree[node]=tree[node*2]+tree[node*2+1];
55+
}
56+
}
57+
58+
static long query(long[] tree, int node, int start, int end, int left, int right) {
59+
if (left > end || right < start) {
60+
return 0;
61+
}
62+
if (left <= start && end <= right) {
63+
return tree[node];
64+
}
65+
long lsum = query(tree, node*2, start, (start+end)/2, left, right);
66+
long rsum = query(tree, node*2+1, (start+end)/2+1, end, left, right);
67+
return lsum+rsum;
68+
}
69+
70+
static void update(long[] arr, long[] tree, int node, int start, int end, int index, long val) {
71+
if (index < start || index > end) {
72+
return;
73+
}
74+
if (start == end) {
75+
arr[index] = val;
76+
tree[node] = val;
77+
return;
78+
}
79+
update(arr, tree,node*2, start, (start+end)/2, index, val);
80+
update(arr, tree,node*2+1, (start+end)/2+1, end, index, val);
81+
tree[node] = tree[node*2] + tree[node*2+1];
82+
}
83+
}
84+
85+
```

0 commit comments

Comments
 (0)