乙個學校裡老師要將班上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複製1 02 1
1 02
33
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...