IT 정보/알고리즘(백준, BOJ)

[백준-BOJ] 2243

Dalyoung 2021. 2. 5. 22:31
반응형

www.acmicpc.net/problem/2243

 

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