P4305 gp_hash_table< , >mp; FastIO

[JLOI2011]不重复数字

题目描述

给定 \(n\) 个数,要求把其中重复的去掉,只保留第一次出现的数。

输入格式

本题有多组数据。

第一行一个整数 \(T\),表示数据组数。

对于每组数据:

第一行一个整数 \(n\)

第二行 \(n\) 个数,表示给定的数。

输出格式

对于每组数据,输出一行,为去重后剩下的数,两个数之间用一个空格隔开。

样例 #1

样例输入 #1

2
11
1 2 18 3 3 19 2 3 6 5 4
6
1 2 3 4 5 6

样例输出 #1

1 2 18 3 19 6 5 4
1 2 3 4 5 6

提示

对于 \(30\%\) 的数据,\(n \le 100\),给出的数 \(\in [0, 100]\)

对于 \(60\%\) 的数据,\(n \le 10^4\),给出的数 \(\in [0, 10^4]\)

对于 \(100\%\) 的数据,\(1 \le T\le 50\)\(1 \le n \le 5 \times 10^4\),给出的数在 \(32\) 位有符号整数范围内。

用超级快读可以大大优化速率!!!

map用 gp_hash_table 也快得多!!!

#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
//#define int long long
int t,n,x;
namespace FastIO
{
	const int _Pu=1<<16;
	const int _d=32;
	char buf[_Pu];
	char *p1=buf+_Pu;
	char *p2=buf+_Pu;
	inline void flushin(){
    	memmove(buf,p1,p2-p1);
		int rlen=fread(buf+(p2-p1),1,p1-buf,stdin);
		if(p1-rlen>buf){buf[p2-p1+rlen]='\0';}
		p1=buf;
	}
    template<typename T>inline void read(T& x)
    {
        if(p1>p2-_d){flushin();}
    	int isne = 0;
    	for (;!isdigit(*p1);++p1){isne=(*p1=='-');}
    	x=(*p1++-'0');
    	for (;isdigit(*p1);++p1){x=x*10+(*p1-'0');}
    	if(isne){x=-x;}
    }
    char obuf[_Pu];
	char *p3=obuf,*p4=obuf+_Pu-_d;
	inline void flushout(){fwrite(obuf,p3-obuf,1,stdout),p3=obuf;}
    template<typename T>inline void write(T x, char end = '\n')
    {
        if(p3>p4){flushout();}
		if(x<0){*p3++='-';x=-x;}
		char sta[20];char *top=sta;
    	do{*top++=(x%10)+'0';x/=10;}while(x);
    	do{*p3++=*--top;}while(top!=sta);
		(*p3++)=end;
    }
    void unsafepc(char x){
    	*p3++=x;
	}
}
using namespace FastIO;
signed main()
{
	read(t);
	while(t--)
	{
		gp_hash_table<int,bool>mp;
		read(n);
		for(int i=1;i<=n;i++)
		{
			read(x);
			if(!mp[x])
			{
				write(x,' ');
				mp[x]=1;
			}
		}	
		
		unsafepc('\n');
	}	
	flushout();
	return 0;
}
posted @ 2023-04-16 09:12  N0zoM1z0  阅读(15)  评论(0编辑  收藏  举报