时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld题目描述
输入
复制2 1 10 10 1 100 2 10
2 1 10 10 1 100 2 10输出
复制2 -1
2 -1说明
两只猫猫都满足主人 1 的要求,但是主人不满足猫猫 2 的要求。
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,a,n) for(int i=n;i>=a;i--)
typedef pair<int,int> pii;
typedef long long ll;
typedef double db;
const int MAXN = 2e5+100;
class anm
{
public:
int ys;
int qw;
}cat[MAXN],peo[MAXN];
int lin[MAXN];
int n,m;
bool cmp(anm& a, anm& b)
{
if(a.ys == b.ys)
return a.qw > b.qw;
return a.ys < b.ys;
}
int main()
{
cin>>n>>m;
rep(i,1,n) cin>>cat[i].ys;
rep(i,1,n) cin>>cat[i].qw;
rep(i,1,m) cin>>peo[i].ys;
rep(i,1,m) cin>>peo[i].qw;
sort(peo+1,peo+m+1,cmp);//输出是对应猫要选铲屎官,所以要对铲屎官排序
lin[m+1] = 1e9;
per(i,1,m) lin[i] = min(lin[i+1],peo[i].qw);
rep(i,1,n){
int pos = upper_bound(lin+1,lin+m+1,cat[i].ys) - lin;
pos--;
if(pos == 0 || peo[pos].ys < cat[i].qw) cout<<"-1 ";
else cout<<peo[pos].ys<<" ";
}
return 0;
}
思路:参考 猫猫与主人_滦尘°的博客-CSDN博客