博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2761: [JLOI2011]不重复数字(平衡树)
阅读量:6894 次
发布时间:2019-06-27

本文共 2763 字,大约阅读时间需要 9 分钟。

2761: [JLOI2011]不重复数字

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 2133  Solved: 825
[ ][ ][ ]

Description

给出N个数,要求把其中重复的去掉,只保留第一次出现的数。
例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复,去除后的结果为1 2 18 3 19 6 5 4。
 

Input

输入第一行为正整数T,表示有T组数据。
接下来每组数据包括两行,第一行为正整数N,表示有N个数。第二行为要去重的N个正整数。
 

Output

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

Sample Input

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

Sample Output

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

HINT

 

对于30%的数据,1 <= N <= 100,给出的数不大于100,均为非负整数;

对于50%的数据,1 <= N <= 10000,给出的数不大于10000,均为非负整数;

对于100%的数据,1 <= N <= 50000,给出的数在32位有符号整数范围内。

提示:

由于数据量很大,使用C++的同学请使用scanf和printf来进行输入输出操作,以免浪费不必要的时间。

 

 

Source

  

题解:在上一次A掉此题很久之后,我再一次看到了这个题= =
这次我用的是平衡树查询,简单的\( O\left(N\log N \right) \),而且速度貌似比上一次哈希还快
1 /************************************************************** 2     Problem: 2761 3     User: HansBug 4     Language: Pascal 5     Result: Accepted 6     Time:1840 ms 7     Memory:2180 kb 8 ****************************************************************/ 9  10 var11    i,j,k,l,m,n,head:longint;12    a,b:array[0..100000] of longint;13    lef,rig,fix:array[0..100000] of longint;14 procedure rt(var x:longint);15           var f,l:longint;16           begin17                if (x=0) or (lef[x]=0) then exit;18                f:=x;l:=lef[x];19                lef[f]:=rig[l];20                rig[l]:=f;21                x:=l;22           end;23 procedure lt(var x:longint);24           var f,r:longint;25           begin26                if (x=0) or (rig[x]=0) then exit;27                f:=x;r:=rig[x];28                rig[f]:=lef[r];29                lef[r]:=f;30                x:=r;31           end;32 function ins(var x:longint;y:longint):boolean;33          begin34               ins:=true;35               if x=0 then36                  begin37                       x:=y;38                       exit;39                  end;40               if a[y]
a[x] then45 begin46 if rig[x]=0 then rig[x]:=y else ins:=ins(rig[x],y);47 end48 else exit(false);49 end;50 begin51 readln(m);52 randomize;53 for l:=1 to m do54 begin55 readln(n);head:=0;56 for i:=1 to n do57 begin58 read(a[i]);59 lef[i]:=0;rig[i]:=0;60 fix[i]:=random(maxlongint);61 end;62 readln;k:=0;63 for i:=1 to n do64 if ins(head,i) then65 begin66 inc(k);67 b[k]:=a[i];68 end;69 for i:=1 to k do70 if i

 

转载于:https://www.cnblogs.com/HansBug/p/4418127.html

你可能感兴趣的文章
多线程技术
查看>>
连接显示提示语
查看>>
ipvsadm的命令参考
查看>>
CCNP学习笔记4
查看>>
linux下搭建 FastDFS + Nginx
查看>>
推荐一个国内的maven库
查看>>
ElasticSearch的Mapping之字段类型
查看>>
jQuery插件
查看>>
数字3为分隔
查看>>
查看MySQL表占用空间大小
查看>>
华章11-12月份新书简介(2017年)
查看>>
第三周作业
查看>>
Vector、ArrayList、List使用深入剖析
查看>>
【调试】Core Dump是什么?Linux下如何正确永久开启?
查看>>
新浪微博API授权
查看>>
电子政务网中信息共享机制的重要性
查看>>
Tomcat_本地项目host配置Server.xml
查看>>
[转载] 财经郎眼20120423:长点心吧“两桶油”!
查看>>
ZooKeeper源码研究系列 客户端创建连接过程分析
查看>>
MySQL datetime && timestamp
查看>>