天天看點

map記錄下标

題目描述

小雲正在參與開發一個即時聊天工具,他負責其中的會話清單部分。

會話清單為顯示為一個從上到下的多行控件,其中每一行表示一個會話,每一個會話都可以以一個唯一正整數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;
}