반응형
2268번: 수들의 합
첫째 줄에는 N(1≤N≤1,000,000), M(1≤M≤1,000,000)이 주어진다. M은 수행한 명령의 개수이며 다음 M개의 줄에는 수행한 순서대로 함수의 목록이 주어진다. 첫 번째 숫자는 어느 함수를 사용했는지를
www.acmicpc.net
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
Main m = new Main();
long start = System.currentTimeMillis();
m.doit();
long end = System.currentTimeMillis();
// System.out.println((end-start)/1000.0f);
}
int N, M;
int arr[];
long tree[];
public void doit() throws IOException{
// System.setIn(new FileInputStream("input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine(), " ");
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[N+1];
tree = new long[4*(N+1)];
for(int i = 0; i < M; i++){
st = new StringTokenizer(br.readLine(), " ");
int x, n1, n2;
x = Integer.parseInt(st.nextToken());
n1 = Integer.parseInt(st.nextToken());
n2 = Integer.parseInt(st.nextToken());
if(x == 0){
//sum
if(n2 < n1){
int temp = n2;
n2 = n1;
n1 = temp;
}
System.out.println(sum(1, 1, N, n1, n2));
}else{
//add
int dif = n2 - arr[n1];
arr[n1] = n2;
add(1, 1, N, n1, dif);
}
}
// System.out.println(Arrays.toString(tree));
br.close();
}
void add(int node, int start, int end, int index, int diff){
if(index < start || index > end){
return;
}
tree[node] += diff;
if(start != end){
int mid = (start + end) / 2;
add(node*2, start, mid, index, diff);
add(node*2+1, mid+1, end, index, diff);
}
}
long sum(int node, int start, int end, int left, int right){
if(right < start || left > end){
return 0;
}
if(left <= start && right >= end){
return tree[node];
}
int mid = (start + end) / 2;
return sum(node * 2, start, mid, left, right) + sum(node*2+1, mid+1, end, left, right);
}
}
반응형
'IT 정보 > 알고리즘(백준, BOJ)' 카테고리의 다른 글
[백준-BOJ] 2294 (0) | 2021.02.05 |
---|---|
[백준-BOJ] 2293 (0) | 2021.02.05 |
[백준-BOJ] 2243 (0) | 2021.02.05 |
[백준-BOJ] 2217 (0) | 2021.02.05 |
[백준-BOJ] 2193 (0) | 2021.02.05 |