题解 | #[NOIP2012]借教室#

[NOIP2012]借教室

https://ac.nowcoder.com/acm/contest/19684/A

二分检验

#include<bits/stdc++.h>
using namespace std;
#define int long long
struct student{
	int num;
	int be;
	int en;
};
student a[1001000];
int room[1001000];
int pre[1001000];
int ans,l,r,mid,n,day,cnt;
bool check(int mid){
	memset(pre,0,sizeof(pre));
	for(int i = 1;i<=mid;i++){
		pre[a[i].be]+=a[i].num;
		pre[a[i].en+1]-=a[i].num;
	}
	for(int i = 1;i<=day;i++){
		pre[i]+=pre[i-1];
		if(pre[i]>room[i])return 0;
	}
	return 1;
}
signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>day>>n;
	for(int i = 1;i<=day;i++)cin>>room[i];
	for(int i = 1;i<=n;i++)cin>>a[i].num>>a[i].be>>a[i].en;
	if(check(n)){
		cout<<0;
		return 0;	
	}	
	l=0;r=n+1;
	while(l<=r){
		mid=(l+r)/2;
		if(check(mid)){
			l=mid+1;
		}else{
			ans=mid;r=mid-1;
		}
	}
	cout<<ans;
}
全部评论

相关推荐

合适才能收到offe...:招聘上写这些态度傲慢的就别继续招呼了,你会发现hr和面试官挺神的,本来求职艰难就可能影响一些心态了,你去这种公司面试的话,整个心态会炸的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务