欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

set和vector

程序员文章站 2022-04-15 14:37:48
...

查找某个特定的数据set比vector快,set以二叉搜索树的方式保存数据。

https://blog.csdn.net/mydriverc2/article/details/62430949

https://blog.csdn.net/zaishaoyi/article/details/46495677

题目链接:点击打开链接

set和vector

如果只是简单的两层循环显然复杂度为O(n*m),超时。

#include<iostream>
#include<algorithm>
#include<set>
#define N 200005
using namespace std;
int inf=0x3f3f3f3f;
int mon[N],ans[N];
set<int,less<int> > se[4];//调用less,将元素排序 ;
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>mon[i];
    }
    for(int i=0;i<n;i++){
        int t;cin>>t;
        se[t].insert(mon[i]);//用set可以保证数据不重复  
    }
    for(int i=0;i<n;i++){
        int t;cin>>t;
        se[t].insert(mon[i]); //用set可以保证数据不重复  
    }
    int m;cin>>m;
    for(int i=0;i<m;i++){
        int t;cin>>t;
        if(se[t].empty()){
            ans[i]=-1;
        }else{
            ans[i]=*se[t].begin();
            for(int j=1;j<=3;j++){//将三个颜色中的这件衣服删除 
                set<int>::iterator it; 
                it=se[j].find(ans[i]);//提高速度的关键 
                //不能写成it=find(se[j].begin(),se[j].end(),ans[i]); 这样也是超时             
                if(it!=se[j].end())
                    se[j].erase(it);
            }
        }        
    }
    cout<<ans[0];
    for(int i=1;i<m;i++)
        cout<<" "<<ans[i];    
    return 0;
}

相关标签: set