Login with GitHub. Nope?
修正 C++ 的程式碼在使用一定量動態記憶體後會產生 RF 的問題 @ 2019/12/6 4:45pm NeoHOJ 強勢復活中 (Open beta)
Submit  Ranklist

Problem : 219 - D. Tentacle Treeeeeeee

Problem Statistics

Solved Member: 17  Submission: 60  User Tried: 17

Statement:

觸手一隻非常強悍的生物,從一開始只有的一個節點,漸漸長出很多生節點,為了避免被攻擊,還會改變自己的頭部,隨機選擇一點節點當頭部,漫無目的的成長是一件很無聊的事,身為一隻觸手多少要有點娛樂,因此觸手每次都會問自己從節點V往頭部的方向走K個節點會到哪個節點。

你的任務是模擬一隻觸手,因此必須做到以下的操作:

1. "a u"表示從節點u的地方長出一個新的節點(一開始的節點編號1,第i次長的節點編號為i+1)。

2. "r u"表示將頭部位置改變至節點u。

3. "q u k"表示詢問從節點u開始,在u與頭部來回走共走K部後會抵達哪個節點。
i.e. 在點 u 和頭部兩點所形成的路徑上來回走動,若碰到頭部或點 u 時還有剩下的步數就折返

Input:Output:

每筆測試檔一筆測試資料。

第一行有一個數字n表示操作數(1 <= n <= 300000),操作方法如題目敘述,保證不會有不合法操作。

為了保證大家寫在線做法,我們將對所有的輸入數字做上一點變化,我們將對所有的數字加上上次所需要輸出的數字d,若尚未輸出任何數字則d=0。所以要還原原本的數字你必須減掉上次所輸出的數字d。
對於每筆操作3輸出一個數字(佔一行)。

Sample Input:Sample Output:

Sample 1:
3
a 1
q 2 1
a 3

Sample 2:
10
a 1
a 2
q 2 1
q 2 2
a 3
q 4 2
r 6
q 5 3
q 5 4
q 5 6
Sample 1:
1

Sample 2:
1
1
2
2
4
4

HINT:

還原的測資:

Sample 1:
3
a 1
q 2 1
a 2

Sample 2:
10
a 1
a 2
q 2 1
q 1 1
a 2
q 3 1
r 4
q 3 1
q 3 2
q 1 2

對於40%的測試資料,1<=n<=5000。
對於70%的測試資料,1<=n<=100000。
對於100%的測試資料,1<=n<=300000。

Problem Setter

Testdata:

TestTimeMemoryScore
0-11000ms65536kb
0-21000ms65536kb
11000ms65536kb10
21000ms65536kb10
31000ms65536kb10
41000ms65536kb10
51000ms65536kb10
61000ms65536kb10
71000ms65536kb10
81000ms65536kb10
92000ms65536kb10
102000ms65536kb10