HackerRank Problem minm-loss

STL set和binary search的使用

Posted by An automatic pencil on December 5, 2018

题目

看题目戳我

题解思路

考虑在第$i$天卖出,只需要找到前面不小于该房价最小的那个。初次想法是用堆,但是这是不太可行的。因为维护这个堆花的时间不确定。若想保证$log$级别的查询和维护,平衡树是很棒的呀。这时候就要用到C++ STL set,它是基于红黑树实现的,自动排序。排好序用二分查找简直不要太舒服。

代码

#include <bits/stdc++.h>

using namespace std;

int main()
{
int n;
cin>>n;
set<long long> s;
long long tmp,minm=1e16;
cin>>tmp;
s.insert(tmp);
for(int i=1;i<n;i++)
{
    cin>>tmp;
    auto it=s.upper_bound(tmp);
    if(it != s.end()) minm = min(minm,*it - tmp);
    s.insert(tmp);
}
cout<<minm;
return 0;

}