Time Limit: 2 sec / Memory Limit: 1024 MB
配点 : 400 点
問題文
長さ L メートルの直線状の木材があります。
x = 1, 2, \dots, L - 1 に対して、木材の左端から x メートルの地点には目印として線 x が引かれています。
Q 個のクエリが与えられます。 i 番目のクエリは数の組 (c_i, x_i) によって表されます。
以下の説明に従ってクエリを i の昇順に処理してください。
- c_i = 1 のとき : 線 x_i がある地点で木材を 2 つに切る。
- c_i = 2 のとき : 線 x_i を含む木材を選び、その長さを出力する。
ただし c_i = 1, 2 の両方に対して、線 x_i はクエリを処理する時点で切られていないことが保証されます。
制約
- 1 \leq L \leq 10^9
- 1 \leq Q \leq 2 \times 10^5
- c_i = 1, 2 (1 \leq i \leq Q)
- 1 \leq x_i \leq L - 1 (1 \leq i \leq Q)
- 全ての i (1 \leq i \leq Q) に対して次が成り立つ: 1 \leq j \lt i かつ (c_j,x_j) = (1, x_i) を満たす j は存在しない。
- 入力は全て整数である。
入力
入力は以下の形式で標準入力から与えられる。
L Q c_1 x_1 c_2 x_2 \vdots c_Q x_Q
出力
c_i = 2 を満たすクエリの回数と等しい行数だけ出力せよ。 j 行目では j 番目のそのようなクエリに対する答えを出力せよ。
入力例 1
5 3 2 2 1 3 2 2
出力例 1
5 3
1 番目のクエリ時点では木材は一度も切られていないので、線 2 を含む木材の長さは 5 メートルです。よって 5 を出力します。
2 番目のクエリによって、木材は 3 メートルの木材と 2 メートルの木材に分割されます。
3 番目のクエリ時点では 線 2 を含む木材の長さは 3 メートルなので、3 を出力します。
入力例 2
5 3 1 2 1 4 2 3
出力例 2
2
入力例 3
100 10 1 31 2 41 1 59 2 26 1 53 2 58 1 97 2 93 1 23 2 84
出力例 3
69 31 6 38 38
Score : 400 points
Problem Statement
We have a long piece of timber with a length of L meters.
For each x = 1, 2, \dots, L - 1, there is a mark called Mark x at x meters from the left end of the piece.
You are given Q queries, the i-th of which is represented as a pair of numbers (c_i, x_i).
Process the queries in ascending order of i as described below.
- If c_i = 1: cut the piece at Mark x_i into two.
- If c_i = 2: choose the piece with Mark x_i on it and print its length.
Here, for both kinds of queries c_i = 1, 2, it is guaranteed that there will have been no cut at Mark x_i when the query is to be processed.
Constraints
- 1 \leq L \leq 10^9
- 1 \leq Q \leq 2 \times 10^5
- c_i = 1, 2 (1 \leq i \leq Q)
- 1 \leq x_i \leq L - 1 (1 \leq i \leq Q)
- For every i (1 \leq i \leq Q), the following holds: there is no j such that 1 \leq j \lt i and (c_j,x_j) = (1, x_i).
- All values in input are integers.
Input
Input is given from Standard Input in the following format:
L Q c_1 x_1 c_2 x_2 \vdots c_Q x_Q
Output
Print the number of lines equal to the number of queries c_i = 2. In the j-th line, print the response to the j-th such query.
Sample Input 1
5 3 2 2 1 3 2 2
Sample Output 1
5 3
At the time of the first query, no cut has been made, so the piece with Mark 2 has a length of 5 meters. Thus, you should print 5.
In the second query, the piece is cut into two pieces with lengths of 3 and 2 meters.
At the time of the third query, the piece with Mark 2 has a length of 3 meters, so you should print 3.
Sample Input 2
5 3 1 2 1 4 2 3
Sample Output 2
2
Sample Input 3
100 10 1 31 2 41 1 59 2 26 1 53 2 58 1 97 2 93 1 23 2 84
Sample Output 3
69 31 6 38 38