题目大体意思就是给一串数,对于第i个数,就找第i个数前面的比它大的数中最小的那个,然后把这些数求和。
我一下子就想到了upper_bound,但是学艺不精,木有搞出来,然后知道了用set,它可以自动按升序排列!!!!这就很,,,,竟然忘了
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include<set>
#include<map>
#define ll long long
using namespace std;
const int N = 4e7 + 8;
const int inf = 0x3f3f3f3f;
ll a[100008];
int n;
int main()
{
set<ll> s;
set<ll>::iterator it;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%lld", &a[i]);
}
ll ans = 0;
for(ll i = 0; i < n; i++)
{
s.insert(a[i]);
it = s.find(a[i]);
it++;
if(it != s.end())
ans += *it;
else
continue;
}
cout << ans << endl;
}
求和那用long long,其他地方用int好像也能过。
官方给的