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
题目链接:点击打开链接
如果只是简单的两层循环显然复杂度为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;
}
推荐阅读
-
iPad Pro和Surface Pro4哪个好?2016最值得买的电脑产品对比盘点
-
固态硬盘和机械硬盘可以在一起使用吗?
-
苹果ipad Pro和ipad mini4有什么区别?ipad Pro和mini4区别对比评测
-
Intel(英特尔)酷睿i5 2520M和Intel 酷睿i5 2450M这两个哪个更好
-
荣耀平板2和荣耀x2哪个值得买?华为荣耀平板2和荣耀x2详细区别对比评测
-
iPad Pro和三星Galaxy TabPro s买哪个好?三星Galaxy TabPro S和iPad Pro区别对比评测
-
AMD RX 570显卡实卡谍照和规格参数一览
-
i9 7900X和R7 1800X哪个好 i9-7900X与R7-1800X区别对比简单测评
-
CPU AMD X4 955紫盒和黑盒的区别 问答式
-
CPU和GPU的区别是什么?CPU和GPU各指什么