佇列Q Wannafly挑戰賽19

2022-05-20 21:57:51 字數 1167 閱讀 3974

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 移到隊尾...