題目鏈結zzt 創造了乙個佇列 q。這個佇列包含了 n 個元素,佇列中的第 i 個元素用 qi 表示。q1 表示隊頭元素,qn 表示隊尾元素。佇列中的元素是 n 的乙個全排列。
zzt 需要在這個佇列上執行 p 次操作,操作分兩種:
first x: 將元素 x 移到隊頭。
last x: 將元素 x 移到隊尾。
在 p 次操作之後,zzt 想知道佇列中的元素的排列方式,由於他最近很忙,因此需要請你幫他解決這個問題。
輸入描述:
第一行輸入乙個正整數 n,表示佇列的大小。
第二行輸入 n 個正整數,q1, q2, q3, … …, qn,qi 表示佇列中的第 i 個元素。保證這 n 個數是 n 的乙個全排列。
第三行輸入乙個正整數 p,表示接下來要進行的操作次數。
接下來 p 行,第 i 行輸入乙個字串 si 以及乙個正整數 xi,表示一次操作。
1 ≤ n ≤ 105.
1 ≤ qi ≤ n.
1 ≤ p ≤ 105.
si \in∈ .
1 ≤ xi ≤ 105.
輸出 n 個正整數,表示 p 次操作之後的佇列。
442
133first 4
last 2
last 1
432
1
由於題目給的數字序列是n的乙個全排列,所以只需用乙個陣列來儲存n的每乙個數字的位置,在下面的插入操作中不斷更新這個陣列中對應數字的位置,最後根據位置進行排序即可。詳見**:
#include
#include
#include
using
namespace std;
const
int maxn =
100010
;int arr[maxn]
, pos[maxn]
, n;
bool
cmp(
int a,
int b)
intmain()
int t, l =
1, r = n;
cin >> t;
while
(t--
)sort
(arr +
1, arr + n +
1, cmp)
;for
(i =
1; i <= n;
++i)
cout << endl;
return0;
}
佇列Q 牛客
記錄我的魚唇時間到了。開兩個陣列乙個記錄 frist,另乙個記錄 last,然後輸出。果斷掛了,因為同乙個數可以操作多次,所以還需要記錄每個數的位置!include define ll long long define p pair define pp pair define pb push bac...
Wannafly挑戰賽 19 A 佇列Q 思維
這道題剛開始我的想法是用兩個棧分別去存first和last所操作的數,用map標記入棧的數,然後先將first棧中的數輸出,然後再遍歷陣列輸出沒有被標記的數,最後再輸出last棧中的數,雖然我覺得沒什麼問題吧,但是只過了5 的樣例。能ac的方法就是首先我們要從100000開始輸入資料 至於為什麼等會...
牛客Wannafly 挑戰賽19 A 佇列Q
zzt 創造了乙個佇列 q。這個佇列包含了 n 個元素,佇列中的第 i 個元素用 q i 表示。q 1 表示隊頭元素,q n 表示隊尾元素。佇列中的元素是 n 的乙個全排列。zzt 需要在這個佇列上執行 p 次操作,操作分兩種 first x 將元素 x 移到隊頭。last x 將元素 x 移到隊尾...