Type: Default 1000ms 256MiB

有序向量去重

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

时间限制: 1.0 秒

空间限制: 256 MB

题目描述

给定一个长度为 nn 的有序向量 a0,,an1a_0,\cdots,a_{n-1},请将该向量进行去重。

交互方式

这是一道函数式交互题,不需要选手考虑输入输出,也不要从标准输入读入数据,或将任何内容输出到标准输出,否则会影响判题。

你提交的代码需要包含头文件 unique.h

你需要实现一个函数 int unique(int),传入参数为 nn,表示正整数序列的长度;返回值为去重之后的正整数序列长度。

你可以调用函数 int get(int),参数是一个介于 00n1n-1 之间的整数 xx,返回值为 axa_x。你无法得知具体的正整数序列,只能使用 get 函数获取。当 get 调用次数超过 3n3n,或者传入参数越界,则会报 Runtime Error

你可以调用函数 void setval(int, int),传入参数为两个介于 00n1n-1 之间的整数 x,yx,y,可以让该向量的 xx 位的值变成 yy 位的值(也就是 axaya_x\leftarrow a_y)。当 setval 调用次数超过 nn,或者传入参数越界,则会报 Runtime Error

以下我们给出一个代码提交实例(会固定返回答案 nn,仅作为示例,不保证能得分):

#include "unique.h"
int unique(int n)
{
    return n;
}

你不需要,也不应该,实现主函数。

我们给出一个样例,供你在本地进行调试。

5
1 1 2 3 3
1 2 3

样例 1 解释

去重后的向量规模没有直接在样例中输出,输出数字的个数即为向量规模。

子任务

对于所有数据,保证 1n105, 1ai1081\le n\le 10^5,~1\le a_i\le 10^8

提示

chap 02 向量,有序向量去重