牛客 佇列Q(思維)

2021-10-10 21:09:10 字數 1294 閱讀 4283

題目鏈結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 移到隊尾...