牛客Wannafly 挑戰賽19 A 佇列Q

2021-08-21 06:53:37 字數 1230 閱讀 4502

zzt 創造了乙個佇列 q。這個佇列包含了 n 個元素,佇列中的第 i 個元素用 q

i 表示。q

1 表示隊頭元素,q

n 表示隊尾元素。佇列中的元素是 n 的乙個全排列。

zzt 需要在這個佇列上執行 p 次操作,操作分兩種:

first x: 將元素 x 移到隊頭。

last x: 將元素 x 移到隊尾。

在 p 次操作之後,zzt 想知道佇列中的元素的排列方式,由於他最近很忙,因此需要請你幫他解決這個問題。

第一行輸入乙個正整數 n,表示佇列的大小。

第二行輸入 n 個正整數,q1, q2, q3, ... ..., qn,qi 表示佇列中的第 i 個元素。保證這 n 個數是 n 的乙個全排列。

第三行輸入乙個正整數 p,表示接下來要進行的操作次數。

接下來 p 行,第 i 行輸入乙個字串 s

i 以及乙個正整數 x

i,表示一次操作。

1 ≤ n ≤ 10

5. 1 ≤ q

i ≤ n. 1 ≤ p ≤ 10

5. s

ii ≤ 10

5.

輸出 n 個正整數,表示 p 次操作之後的佇列。
一道比較有意思的題目,前期一直是正向考慮。然後5%-10%。後來想通了,直接倒著查詢,判斷這個數最終是放到前面還是後面了,標記一下儲存到不同的記錄陣列,然後按順序輸出即可(first的話是越往後的在前面,last的話是越往前越在後面,未標記的按照順序輸出)。

#includeusing namespace std;

#define maxn 1000500

int a[maxn];

stacksta;

string s[maxn];

int re[maxn];

int fst[maxn];

int last[maxn];

int vis[maxn];

int ans[maxn];

int main()

cin>>q;

for(int i=0;i>s[i]>>re[i];

}for(int i=q-1;i>=0;i--)

else if(s[i]=="last"&&!vis[re[i]])

}for(int i=0;i=0;i--)

{if(!i) cout<

牛客 wannafly挑戰賽19 A 佇列

zzt 創造了乙個佇列 q。這個佇列包含了 n 個元素,佇列中的第 i 個元素用 qi 表示。q1 表示隊頭元素,qn 表示隊尾元素。佇列中的元素是 n 的乙個全排列。zzt 需要在這個佇列上執行 p 次操作,操作分兩種 first x 將元素 x 移到隊頭。last x 將元素 x 移到隊尾。在 ...

牛客Wannafly挑戰賽12 題解

傳送門 說是比賽題解,其實我只會前三題 後面的一定補 t1題意,在乙個長度為n的時間內,問如何選擇存款期限,使得收益最大。dp include include include include using namespace std define fi first define se second d...

牛客網 Wannafly挑戰賽21 A 燈塔

題目鏈結 題目描述 z市是一座港口城市,來來往往的船隻依靠燈塔指引方向。在海平面上,存在n個燈塔。每個燈塔可以照亮以它的中心點為中心的90 範圍。特別地,由於特殊限制,每個燈塔照亮範圍的角的兩條邊必須要麼與座標軸平行要麼與座標軸成45 由於經費限制,z市的燈塔只能被點亮一座。你需要求出在這種情況下,...