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.1 ≤ xi ≤ 105.
輸出 n 個正整數,表示 p 次操作之後的佇列。
示例1
複製
4
4 2 1 3
3first 4
last 2
last 1
複製
4 3 2 1
思路: 寫入陣列的時候按順序標記下標,根據操作更改下標值,最後按照下標公升序對輸入陣列排序。
ac**:
#include #include #include using namespace std;
const int maxn=1e5+10;
int arr[maxn];
int pos[maxn*2];
bool cmp(int i,int j)
int l=1,r=n;
int q;
cin>>q;
while(q--)
else
}sort(arr+1,arr+1+n,cmp);
for(int i=1;i<=n;i++)
cout<
return 0;
}
Wannafly挑戰賽 19 A 佇列Q 思維
這道題剛開始我的想法是用兩個棧分別去存first和last所操作的數,用map標記入棧的數,然後先將first棧中的數輸出,然後再遍歷陣列輸出沒有被標記的數,最後再輸出last棧中的數,雖然我覺得沒什麼問題吧,但是只過了5 的樣例。能ac的方法就是首先我們要從100000開始輸入資料 至於為什麼等會...
牛客 wannafly挑戰賽19 A 佇列
zzt 創造了乙個佇列 q。這個佇列包含了 n 個元素,佇列中的第 i 個元素用 qi 表示。q1 表示隊頭元素,qn 表示隊尾元素。佇列中的元素是 n 的乙個全排列。zzt 需要在這個佇列上執行 p 次操作,操作分兩種 first x 將元素 x 移到隊頭。last x 將元素 x 移到隊尾。在 ...
牛客Wannafly 挑戰賽19 A 佇列Q
zzt 創造了乙個佇列 q。這個佇列包含了 n 個元素,佇列中的第 i 個元素用 q i 表示。q 1 表示隊頭元素,q n 表示隊尾元素。佇列中的元素是 n 的乙個全排列。zzt 需要在這個佇列上執行 p 次操作,操作分兩種 first x 將元素 x 移到隊頭。last x 將元素 x 移到隊尾...