有没有什么借助排序或者什么东西来离散化的?
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