題目描述
小雲正在參與開發一個即時聊天工具,他負責其中的會話清單部分。
會話清單為顯示為一個從上到下的多行控件,其中每一行表示一個會話,每一個會話都可以以一個唯一正整數id表示。
當使用者在一個會話中發送或接收資訊時,如果該會話已經在會話清單中,則會從原來的位置移到清單的最上方;如果沒有在會話清單中,則在會話清單最上方插入該會話。
小雲在現在要做的工作是測試,他會先把會話清單清空等待接收資訊。當接收完大量來自不同會話的資訊後,就輸出目前的會話清單,以檢查其中是否有bug。
輸入描述:
輸入的第一行為一個正整數T(T<=10),表示測試資料組數。
接下來有T組資料。每組資料的第一行為一個正整數N(1<=N<=200),表示接收到資訊的次數。第二行為N個正整數,按時間從先到後的順序表示接收到資訊的會話id。會話id不大于1000000000。
輸出描述:
對于每一組資料,輸出一行,按會話清單從上到下的順序,輸出會話id。
相鄰的會話id以一個空格分隔,行末沒有空格。
示例1
輸入
複制
3
5
1 2 3 4 5
6
1 100 1000 1000 100 1
7
1 6 3 3 1 8 1
輸出
複制
#include <iostream>
#include <map>
using namespace std;
int main(){
int T;
scanf("%d",&T);
while(T--){
int N;
scanf("%d",&N);
map<int,int> Result,Position;
for(int i = 0;i < N;i ++){
int tmp;
scanf("%d",&tmp);
if(Position.find(tmp) != Position.end()){
int k = Position[tmp];
Result.erase(k);
}
Result[N - i] = tmp;
Position[tmp] = N - i;
}
for(auto i = Result.begin();i != Result.end();i ++){
printf("%d ",i->second);
}
printf("\n");
}
return 0;
}