2761: [JLOI2011]不重复数字(平衡树)
时间:2022-05-08
本文章向大家介绍2761: [JLOI2011]不重复数字(平衡树),主要内容包括2761: [JLOI2011]不重复数字、Description、Input、Output、Sample Input、Sample Output、HINT、Source、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
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掉此题很久之后,我再一次看到了这个题= =
这次我用的是平衡树查询,简单的( Oleft(Nlog 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 var
11 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 begin
17 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 begin
26 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 begin
34 ins:=true;
35 if x=0 then
36 begin
37 x:=y;
38 exit;
39 end;
40 if a[y]<a[x] then
41 begin
42 if lef[x]=0 then lef[x]:=y else ins:=ins(lef[x],y);
43 end
44 else if a[y]>a[x] then
45 begin
46 if rig[x]=0 then rig[x]:=y else ins:=ins(rig[x],y);
47 end
48 else exit(false);
49 end;
50 begin
51 readln(m);
52 randomize;
53 for l:=1 to m do
54 begin
55 readln(n);head:=0;
56 for i:=1 to n do
57 begin
58 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 do
64 if ins(head,i) then
65 begin
66 inc(k);
67 b[k]:=a[i];
68 end;
69 for i:=1 to k do
70 if i<k then write(b[i],' ') else writeln(b[i]);
71 end;
72 readln;
73 end.
- Docker Swarm集群初探
- 数据库逻辑设计
- 06.移动先行之谁主沉浮----我的代码我来写(Xaml的优势)
- [快学Python3]迭代器和生成器
- [快学Python3]INI文件读写
- Vijos P1131 最小公倍数和最大公约数问题【暴力】
- Vjios P1736 铺地毯【暴力,思维】
- Vijos P1116 一元三次方程求解【多解,暴力,二分】
- Python Selenium设计模式-POM
- [快学Python3]HTTP处理 - urllib模块
- Vijos P1786 质因数分解【暴力】
- 模仿百度新闻列表底部的“加载更多”
- Vijos P1035 贪婪的送礼者【模拟】
- Vijos P1114 FBI树【DFS模拟,二叉树入门】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一天一大 leet(最小区间)难度:困难-Day20200801
- 一天一大 lee(全排列 II)难度:中等-Day20200918
- 一天一大 lee(冗余连接 II)难度:困难-Day20200917
- 一天一大 lee(左叶子之和)难度:简单-Day20200919
- 【一天一大 lee】 把二叉搜索树转换为累加树 (难度:简单)-Day20200921
- 【一天一大 lee】子集 (难度:中等)-Day20200920
- 用了这个jupyter插件,我已经半个月没打开过excel了
- Webpack学习笔记
- 正则表达式学习笔记
- R 可视化 | 华夫饼图
- 绝了!Python定时爬取微博热搜+pyecharts动态图展示
- 实战 | Python爬取B站柯南弹幕+Gephi梳理主线剧情
- 别再问我 Python 怎么识别数字验证码了!
- Python自动化办公 | 同事要我帮忙补写178份Word日报!别闹!
- Excel多区间判断,其实很简单