求助离散化

P4175 [CTSC2008] 网络管理

有没有什么借助排序或者什么东西来离散化的?
by 樱初音斗橡皮 @ 2019-12-26 22:24:24


排一遍序,用lower_bound
by tuliwei @ 2019-12-26 22:25:34


```cpp int tmp[N]; memcpy(tmp, a, sizeof tmp);//要离散化a sort(tmp + 1, tmp + n + 1); for (...) a[i] = lower(tmp + 1, tmp + n + 1, a[i]) - tmp;
by tuliwei @ 2019-12-26 22:29:01


@[tuliwei](/user/35090) 谢谢,不过这个case里面好像不太好用
by 樱初音斗橡皮 @ 2019-12-26 22:49:18


不对呀,这样的话重复元素怎么办?
by 樱初音斗橡皮 @ 2019-12-26 22:49:42


unique?
by momo5440 @ 2019-12-26 23:16:30


```cpp n = read() ; q = read() ; rep(i , 1 , n) { val[i] = read() ; Q[++ tot] = { 0 , 1 , val[i] , i , 1 } ; b[++ len] = val[i] ; } rep(i , 2 , n) { int x = read() , y = read() ; G.add(x , y) ; G.add(y , x) ; } dfs(1) ; dfs(1 , 1) ; rep(i , 1 , q) { int op = read() ; if(! op) { int y = read() , z = read() ; Q[++ tot] = { 0 , -1 , val[y] , y , 1 } ; val[y] = z ; Q[++ tot] = { 0 , 1 , val[y] , y , 1 } ; b[++ len] = z ; } else { int y = read() , z = read() ; Q[++ tot] = { y , z , op , ++ pos , 2} ; } } sort(b + 1 , b + len + 1) , len = unique(b + 1 , b + len + 1) - b - 1 ; rep(i , 1 , tot) if(Q[i].type != 2) Q[i].k = lower_bound(b + 1 , b + len + 1 , Q[i].k) - b ;
by 1saunoya @ 2019-12-27 07:32:26


@[樱初音斗橡皮](/user/66287) 重复元素没关系啊!
by tuliwei @ 2019-12-27 15:27:54


|