这道题考查的还是基本STL的使用 这次考察的是去重函数的STL unique()
unique的作用是“去掉”容器中相邻元素的重复元素(不一定要求数组有序),它会把重复的元素添加到容器末尾(所以数组大小并没有改变),而返回值是去重之后的尾地址。
所以如果你想要的是将任意一个数组实现去重 那么首先要将他sort排序。
然后unique返回的还是去重之后的尾地址,那么len=unique(ar,ar+n) - ar 即是去重后数组的首地址。
如果之后还要使用这个数组的话,记得呀更新数组的长度。
总结一下,发现的STL的两个特性吧:
1,stl函数的参数如果是一个数组的话 习惯上使用左闭右开的想法。
2, stl函数的返回值对于数组的话,极有可能是返回的是一个地址。
#include <algorithm> #include <iostream> using namespace std; const int maxlen = 1e6 + 10; long long ar[maxlen]; int main(){ int n,i,j,k,len,ans; long long x; while(~scanf("%d",&n)){ for(i=0;i<n;i++) scanf("%lld",&ar[i]); sort(ar,ar+n); scanf("%lld",&x); len=unique(ar,ar+n) - ar; ans=len - (lower_bound(ar,ar+len,x) - ar) ; printf("%d ",ans); } return 0; }