Skip to content

Commit 830dd77

Browse files
committed
[IndexedTree] baekjoon-2268
1 parent cf47191 commit 830dd77

File tree

4 files changed

+63
-0
lines changed

4 files changed

+63
-0
lines changed

โ€ŽREADME.md

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
| 03 | โญ๏ธ | [Baekjoon-2243 ์‚ฌํƒ•์ƒ์ž](./src/IndexedTree/P2243) | |
9595
| 04 | | [Baekjoon-5676 ์Œ์ฃผ ์ฝ”๋”ฉ](./src/IndexedTree/P5676) | |
9696
| 05 | | [Baekjoon-1275 ์ปคํ”ผ์ˆ2](./src/IndexedTree/P1275) | |
97+
| 06 | | [Baekjoon-2268 ์ˆ˜๋“ค์˜ ํ•ฉ](./src/IndexedTree/P2268) | |
9798

9899
### Trie
99100

โ€Žsrc/IndexedTree/P2268/Main.java

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package IndexedTree.P2268;
2+
3+
import java.io.*;
4+
import java.util.*;
5+
6+
public class Main {
7+
8+
final static char CMD_SUM = '0', CMD_MOD = '1';
9+
static int N, M;
10+
static long[] segmentTree;
11+
12+
public static void main(String[] args) throws Exception {
13+
System.setIn(new FileInputStream("src/IndexedTree/P2268/input.txt"));
14+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
15+
StringTokenizer st = new StringTokenizer(br.readLine());
16+
17+
N = Integer.parseInt(st.nextToken());
18+
M = Integer.parseInt(st.nextToken());
19+
20+
segmentTree = new long[(int) Math.pow(2, Math.ceil(Math.log(N) / Math.log(2)) + 1)];
21+
22+
StringBuilder sb = new StringBuilder();
23+
while (M-- > 0) {
24+
st = new StringTokenizer(br.readLine());
25+
char cmd = st.nextToken().charAt(0);
26+
int p1 = Integer.parseInt(st.nextToken()), p2 = Integer.parseInt(st.nextToken());
27+
if (cmd == CMD_SUM) sb.append(sum(1, 1, N, p1, p2)).append("\n");
28+
else if (cmd == CMD_MOD) modify(1, 1, N, p1, p2);
29+
}
30+
System.out.println(sb.toString());
31+
}
32+
33+
static long sum(int idx, int start, int end, int i, int j) {
34+
if (i > j) {
35+
return sum(idx, start, end, j, i);
36+
} else {
37+
if (j < start || end < i) return 0;
38+
if (i <= start && end <= j) return segmentTree[idx];
39+
return sum(idx*2, start, (start+end)/2, i, j)
40+
+ sum(idx*2+1, (start+end)/2 + 1, end, i, j);
41+
}
42+
}
43+
44+
static void modify(int idx, int start, int end, int i, int k) {
45+
if (i < start || end < i) return;
46+
if (start == end) segmentTree[idx] = k;
47+
else {
48+
modify(idx*2, start, (start+end)/2, i, k);
49+
modify(idx*2+1, (start+end)/2 + 1, end, i, k);
50+
segmentTree[idx] = segmentTree[idx*2] + segmentTree[idx*2+1];
51+
}
52+
}
53+
}

โ€Žsrc/IndexedTree/P2268/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## [baekjoon-2268] ์ˆ˜๋“ค์˜ ํ•ฉ
2+
3+
![image](https://user-images.githubusercontent.com/22045163/104674536-27eb3880-5727-11eb-8fbc-b7b6ca110e4a.png)

โ€Žsrc/IndexedTree/P2268/input.txt

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
3 5
2+
0 1 3
3+
1 1 2
4+
1 2 3
5+
0 2 3
6+
0 1 3

0 commit comments

Comments
ย (0)