对于范围很大,但实际用到的范围很小时,可以靠考虑离散化节省空间。
数组:
1.
int tot=unique(a,a+n)-a;
///unique返回的是把相邻重复的放到后面之后的前面的地址,-a之后是其不重复的大小,size()。
2.
vector<int>v;
erase(unique(v,begin(),v.end()),v.end());///是重复的删除 erase(删除首地址,删除末地址)只能用于STL
除了容器以外,还可以作用于string
string ss="12345";
ss.erase(0,2); erase(删除首下表,删除末下标(但不包括))
离散化:
for(int i = 1; i <= n ; i++){
scanf("%d %d",&L[i],&R[i]);
a[tot++]=L[i],a[tot++]=R[i];
}sort(a,a+tot);
tot=unique(a,a+tot)-a;
for(int i = 1 ; i <= n ; i++){
int l=lower_bound(a,a+tot,L[i])-a+1;//离散化之后的下标
int r=lower_bound(a,a+tot,R[i])-a+1;
}