不会用 stl 的 Frocean 看见别人用一行 unique 解决离散化 感觉好厉害
但为什么打主席树别人 unique 能 100 分 而我的只有 20 分 啊......
但是就是不想学 =-=
于是自己打了个 手动的 离散化 当然 sort 还是要用一下的啦哈哈哈哈.......
费时间 费空间 岂不美哉
下放代码
//不带去重的
int v[MAXN],newv[MAXN],n;
short cmp(int x,int y) {return v[x] < v[y];}
int main()
{
scanf("%d",&n); for (int a = 1 ; a <= n ; ++ a)
scanf("%d",&v[a]),newv[a] = a;
sort(newv + 1,newv + n + 1,cmp);
return 0;
}
//可以去重的(丑死了)
struct Discretization {
int value,rank;
} s[MAXN];
int cpy[MAXN],n;
short cmpto(Discretization x,Discretization y)
{
return x.value < y.value;
}
short cmpback(Discretization x,Discretization y)
{
return x.rank < y.rank;
}
int main()
{
scanf("%d",&n); for (int a = 1 ; a <= n ; ++ a)
scanf("%d",&s[a].value),s[a].rank = a;
sort(s + 1,s + n + 1,cmpto);
for (int a = 1 ; a <= n ; ++ a) cpy[a] = s[a].value;
for (int a = 1 ; a <= n ; ++ a)
if (cpy[a] == cpy[a - 1]) s[a].value = s[a - 1].value;
else s[a].value = s[a - 1].value + 1;
sort(s + 1,s + n + 1,cmpback);
return 0;
}