136. 邻值查找set lower_bound

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了136. 邻值查找set lower_bound相关的知识,希望对你有一定的参考价值。


set的lower_bound没找到返回的迭代器就是 st.end()

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n;
map<int,int>mp;
int main(void)

    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i],mp[a[i]]=i;
    set<int>st; st.insert(a[1]);
    for(int i=2;i<=n;i++)
    
        auto temp=st.lower_bound(a[i]);
        if(temp==st.end())//都比它小
        
            temp--;
            cout<<a[i]-(*temp)<<" "<<mp[*temp]<<'\\n';
        
        else
        
            if(temp==st.begin())//都比它大
            
                cout<<*temp-a[i]<<" "<<mp[*temp]<<'\\n';
            
            else//有比他小的,有比他大的
            
                int temp1=*temp;
                temp--;
                int temp2=*temp;
                if(a[i]-temp2<=temp1-a[i]) cout<<a[i]-temp2<<" "<<mp[temp2]<<'\\n';
                else cout<<temp1-a[i]<<" "<<mp[temp1]<<'\\n';
            
        
        st.insert(a[i]);
    
    return 0;

以上是关于136. 邻值查找set lower_bound的主要内容,如果未能解决你的问题,请参考以下文章

CH1301 邻值查找set应用

关于set的lower_bound 和 std的lower_bound

关于set的lower_bound 和 std的lower_bound

CHOI1301 邻值查找

STL容器位运算常用库函数

STL set,map