離散化

all_for_god發表於2024-11-11
  • 離散化可以說是非常不熟練的部分做一次錯一次
    透過c++自帶的函式可以很方便地進行離散化的操作
  • 函式unique去重,lower_buond在有序的序列上二分查詢。
for(int i=1;i<=n;i++) cin>>a[i],b[i]=a[i];
sort(b+1,b+n+1);int len=unique(b+1,b+n+1)-(b+1);//這裡是地址,len求的是離散化後值域的長度
for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+len+1,a[i])-b;//注意lower_bound返回的也是地址,需要減b
//還需要特別注意的是這裡是i<=n而不是len,這個硬控我2個小時
  • 全文背誦。

相關文章