第四个点哇掉了,求调
  • 板块CF732D Exams
  • 楼主DreamBuilder
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/7/14 21:17
  • 上次更新2023/11/4 14:47:22
查看原帖
第四个点哇掉了,求调
373897
DreamBuilder楼主2021/7/14 21:17

RT

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
int a[maxn], b[maxn],n , m,ans = -1;
bool flag[maxn];
bool check(int x){
	int num = 0;
	for(int i = 1; i <= m; ++i)
		flag[i] = false;
	for(int i = x; i >= 1; --i){
		if(a[i] != 0 && !flag[a[i]]){
			flag[a[i]] = true;
			num += b[a[i]];
		}
		else
			num --;
	}
	if(num > 0)
		return false;
	for(int i = 1; i <= m; ++i)
		if(!flag[i])
			return false;
	return true;
}
int main(){
	int n;
	cin >> n >> m;
	for(int i = 1; i <= n; ++i)
		cin >> a[i];
	for(int i = 1; i <= m; ++i)
		cin >> b[i];
	int l = 1, r = n;
	while(l <= r){
		int mid = (l + r) / 2;
		if(check(mid)){
			ans = mid;
			r = mid - 1;
		}
		else
			l = mid + 1;
	}
	cout << ans;
	return 0;
}
2021/7/14 21:17
加载中...