반응형
2243번: 사탕상자
첫째 줄에 수정이가 사탕상자에 손을 댄 횟수 n(1≤n≤100,000)이 주어진다. 다음 n개의 줄에는 두 정수 A, B, 혹은 세 정수 A, B, C가 주어진다. A가 1인 경우는 사탕상자에서 사탕을 꺼내는 경우이다.
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;
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 MAX = 1000001;
int N;
long tree[] = new long[4*MAX];
public void doit() throws IOException{
// System.setIn(new FileInputStream("input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String [] input;
N = Integer.parseInt(br.readLine());
for(int i = 0; i < N; i++){
input = br.readLine().split(" ");
if("2".equals(input[0])){
int index = Integer.parseInt(input[1]);
int dif = Integer.parseInt(input[2]);
update(1, 0, MAX-1, index, dif);
}else{
int k = Integer.parseInt(input[1]);
int index = find(1, 0, MAX-1, k);
System.out.println(index);
update(1, 0, MAX-1, index, -1);
}
}
br.close();
}
int find(int node, int start, int end, long k){
if(start == end){
return start;
}
int mid = (start + end) / 2;
if(tree[node*2] >= k){
return find(node * 2, start, mid, k);
}else{
return find(node * 2 + 1, mid+1, end, k - tree[node*2]);
}
}
void update(int node, int start, int end, int index, int diff){
if(index < start || index > end){
return;
}
tree[node] += diff;
if(start == end){
return;
}
int mid = (start + end) / 2;
update(node * 2, start, mid, index, diff);
update(node * 2 + 1, mid + 1, end, index, diff);
}
public void write() throws IOException{
PrintWriter pw = new PrintWriter("output.txt");
pw.println("1234");
pw.close();
}
}
반응형
'IT 정보 > 알고리즘(백준, BOJ)' 카테고리의 다른 글
[백준-BOJ] 2293 (0) | 2021.02.05 |
---|---|
[백준-BOJ] 2268 (0) | 2021.02.05 |
[백준-BOJ] 2217 (0) | 2021.02.05 |
[백준-BOJ] 2193 (0) | 2021.02.05 |
[백준-BOJ] 2178 (0) | 2021.02.05 |