列表 list容器的使用(STL熟練掌握)

2021-09-28 05:40:13 字數 1434 閱讀 3041

乙個學校裡老師要將班上nn個同學排成一列,同學被編號為1\sim n1∼n,他採取如下的方法:

先將11號同學安排進佇列,這時佇列中只有他乙個人;

2-n2−n號同學依次入列,編號為i的同學入列方式為:老師指定編號為i的同學站在編號為1\sim (i -1)1∼(i−1)中某位同學(即之前已經入列的同學)的左邊或右邊;

從佇列中去掉m(m

在所有同學按照上述方法佇列排列完畢後,老師想知道從左到右所有同學的編號。

第11行為乙個正整數nn,表示了有nn個同學。

第2-n2−n行,第ii行包含兩個整數k,pk,p,其中kk為小於ii的正整數,pp為00或者11。若pp為00,則表示將ii號同學插入到kk號同學的左邊,pp為11則表示插入到右邊。

第n+1n+1行為乙個正整數mm,表示去掉的同學數目。

接下來mm行,每行乙個正整數xx,表示將xx號同學從佇列中移去,如果xx號同學已經不在佇列中則忽略這一條指令。

11行,包含最多nn個空格隔開的正整數,表示了佇列從左到右所有同學的編號,行末換行且無空格。

輸入 #1複製

4

1 02 1

1 02

33

輸出 #1複製

2 4 1
樣例解釋:

將同學22插入至同學11左邊,此時隊列為:

2 121

將同學33插入至同學22右邊,此時隊列為:

2 3 1231

將同學44插入至同學11左邊,此時隊列為:

2 3 4 12341

將同學33從佇列中移出,此時隊列為:

2 4 1241

同學33已經不在佇列中,忽略最後一條指令

最終佇列:

2 4 1241

資料範圍

對於20\%20%的資料,有n≤10n≤10;

對於40\%40%的資料,有n≤1000n≤1000;

對於100\%100%的資料,有n, m≤100000n,m≤100000。

#include#includeusing namespace std;

using iter = list::iterator;

int n,m;

iter pos[100005];

listl;

bool hasbeerased[100005];

int main()

else

} scanf("%d", &m);

for (int i = 1; i <= m; i++)

hasbeerased[x] = true;

} bool first = true;

for (int x : l)

else

} return 0;

}

STL 順序容器 列表list

list和雙向鍊錶結構相似,每個節點包含乙個資料塊,前向指標,和後向指標,儲存在非連續的記憶體空間中 很顯然,查詢操作時,只能順序查詢,不支援內部隨機訪問 不像陣列,向量vectoer,佇列可以用下標查詢 但是可以在任意序列位置插入和刪除,這是vector和queue deque 無法比擬的 而且相...

教你使用STL容器之list

相較於vector的連續線性空間,list就稍微有點複雜,它的好處是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。list對於空間的運用有絕對的精準,一點也不浪費,而且對於任何位置元素的插入和刪除,list時間複雜度為o 1 list底層是乙個帶頭結點的雙向迴圈鍊錶。list的插入和刪除操作都不...

列表容器list

相對於vector來說,list比較複雜,允許插入,刪除,list節點不保證在儲存空間連續存在,所以必須有指向它的節點,它是雙向環狀鍊錶,需要乙個指標,api為 push front x 把元素 x推入 插入 到鍊錶頭部 pop front 彈出 刪除 鍊錶首元素 merge listref 把 l...