社区讨论

简单二分题WA on #2 求调!

CF1260D A Game with Traps参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@m5do048x
此快照首次捕获于
2025/01/01 16:58
去年
此快照最后确认于
2025/11/04 12:05
4 个月前
查看原帖
rt,对着题解怎么改都是一样,现在准备开始对拍,求调!
code:
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node{
	int l,r,d;
}b[200005];
int m,n,k,t,a[200005],vis[200005];
int cmp(node a,node b){
	return a.d>b.d;
}
int cmp2(int a,int b){
	return a>b;
}
int check(int mid){
	for(int i = 1;b[i].d>a[mid];i++){
		vis[b[i].l]++;
		vis[b[i].r+1]--;
	}
	int ans;
	ans = n+1;
	for(int i = 1;i<=n;i++){
		vis[i] = vis[i-1]+vis[i];
		if(vis[i]){
			ans = ans+2;
		}
	}
	for(int i = 0;i<=n+1;i++){
		vis[i] = 0;
	}
	return ans<=t;
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>m>>n>>k>>t;
	for(int i = 1;i<=m;i++){
		cin>>a[i];
	}
	for(int i = 1;i<=k;i++){
		cin>>b[i].l>>b[i].r>>b[i].d;
	}
	sort(a+1,a+m+1,cmp2);
	sort(b+1,b+k+1,cmp);
	int l,r;
	l = 0;
	r = m;
	while(l<=r){
		int mid;
		mid = (l+r)/2;
		if(check(mid)){
			l = mid+1;
		}else{
			r = mid-1;
		}
	}
	cout<<r<<"\n";
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...