T3
2025-02-24 11:05:07
发布于:浙江
23阅读
0回复
0点赞
大家的解法基本上是 的,这里给一个 的做法
对于每个位置,我们的目标是找出所有鼹鼠中能够适用且能力值最小的那一只。为了高效地实现这一目标,我们只需维护一个特定的数据结构,该结构要具备快速查找所需数据的能力。
在具体的数据结构选择上,有两种不错的方案。其一,我们可以采用动态开点的权值线段树,并在其上进行二分查找操作;其二,也可以使用 set
容器,利用其内部自带的二分查找功能。
int n;
cin >> n;
vector<int> arr(n + 1);
for (int i = 1; i <= n; i++) cin >> arr[i];
set<pair<int, int> > s;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
s.emplace(x, i);
}
for (int i = 2; i <= n; i++) {
int dis = arr[i] - arr[i - 1];
auto it = s.upper_bound({dis, 0});
if (it == s.end()) {
cout << "NO" << endl;
cout << i - 1 << endl;
return;
}
s.erase(it);
}
cout << "YES" << endl;
全部评论 1
终于见到一个和我一样用set的了
2025-02-24 来自 广东
0
有帮助,赞一个