题目意思:给你一组数,假设当前是第i个数,求前i-1个数中是否有大于第i个数的数,如果有那么总值加上大于它的最小值。
题解:set容器可以自动从小到大排序并去重,所以我们可以设置一个set来存这个数,每存这个数之前先找一下是否有比它大的数,由于题目要求要的是比它大的最小值,根据set的特点,所以我们就需要找第一个比它大的数,即upper_bound()函数。
#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
set <int> s;
int main( )
{
s.clear();
set<int>::iterator it;
int n;
cin>>n;
long long sum=0;
int m;
for(int i=1;i<=n;i++)
{
cin>>m;
it=s.upper_bound(m);
if(it!=s.end())//判断是否找到,若没找到则it=s.end()
{
cout<<*it<<" ";
sum+=*it;
}
s.insert(m);
}
cout<<sum<<endl;
return 0;
}