佇列Q 雙陣列下標查詢

2021-08-22 13:40:52 字數 1287 閱讀 9746

鏈結比賽題目

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.

si1 ≤ xi ≤ 105.

輸出 n 個正整數,表示 p 次操作之後的佇列。
示例1

4

4 2 1 3

3first 4

last 2

last 1

4 3 2 1
暴力模擬

要挪走那個元素 就把他置為0  然後把他放到隊頭or隊尾

存的時候 要注意 有個小技巧乙個陣列存值 乙個陣列存下標

因為題目說了是全排列所以不存在相同的數字  所以每個數字對應乙個下標

通過下表可以o(1)的時間內找到他 並且修改為0  修改時注意存下標的陣列也要跟著修改

**

#include#include#includeusing namespace std;

const int maxn=4e5+28;

int a[maxn],b[maxn];

int n,m,t,w,flag;

int main()

t=n/2;w=n/2+n-1;

scanf("%d",&m);

while(m--)

else

}for(int i=t;i<=w;i++)

}return 0;

}

從陣列中查詢給定數的下標

package array 1 輸入任意數,從當前陣列中進行查詢。如果有,輸出其下標 如果沒有,則輸出 1,表示無。2 輸入數字,其在陣列中有重複值,輸出其出現第二次時的下標值。思想 1 我們需要初始化乙個陣列int,在其中查詢。需要乙個初始值num 2 對陣列進行迴圈迭代,通過if判斷,如果陣列中...

二分查詢(簡單版) 陣列下標表示

如果不是從一組隨機的序列裡查詢,而是從一組排好序的序列裡找出某個元素的位置,則可以有更快的演算法 例 11.4.折半查詢 include define len 8 int a len int binarysearch int number return 1 int main void 由於這個序列已...

Q1 二維陣列中的查詢

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。將要查詢的元素和二維陣列 矩陣 的右上角元素比較,如果相等則返回true。如果大於這個元素,那麼可以把第一行的元素去掉 如果小於這個元...