专栏文章

题解:AT_abc431_c [ABC431C] Robot Factory

AT_abc431_c题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@min8uedg
此快照首次捕获于
2025/12/01 22:27
3 个月前
此快照最后确认于
2025/12/01 22:27
3 个月前
查看原文
Update 2025/11/18\text{Update 2025/11/18}时间复杂度瓶颈在排序,应为 O(NlogN+MlogM)O(N \log N+M \log M)

思路

题目要求做到 O(max(N,M))O(\max(N,M))
下文中 iiHH 数组的下标。jjBB 数组的下标。
考虑双指针,先对 HiH_iBjB_j 升序排序。则有对于数对 (i,j)(i,j),若其不满足条件。则 (i,k)(k[1,j1])(i,k)(k \in [1,j-1]) 都不满足条件。
直接考虑对于每个 ii,去往后找第 11 个可行的 jj,满足题目的要求,即 BjHiB_j \ge H_i。每次找到后 iijj 都往右移动。没找到输出 No。时间复杂度为寻找 jjO(M)O(M)

代码

CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int n,m,k,a[N],b[N],cnt;
signed main(){
    scanf("%lld%lld%lld",&n,&m,&k);
	for(int i=1;i<=n;i++) scanf("%lld",a+i); 
	for(int i=1;i<=m;i++) scanf("%lld",b+i); 
	sort(a+1,a+n+1);sort(b+1,b+m+1);
	int i=1,j=1;
	while(i<=n&&j<=m){
		while(j<=m&&b[j]<a[i]) j++;
		if(j>m) break;
		i++;j++;
		if(++cnt==k) return printf("Yes"),0;
	}printf("No");
	return 0;
}
撒花!

评论

1 条评论,欢迎与作者交流。

正在加载评论...