求一个强一点的样例
查看原帖
求一个强一点的样例
461012
dyyzy楼主2022/7/22 00:56

用差分+二分做的,但是一堆TLE 求样例/求调

#include<iostream>
#include<cstring>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define ll long long
using namespace std;
const int N=1e6+5;
ll a[N],b[N],num[N],s[N],e[N],n,m,l,r;
bool check(ll x){
	ll sum=0;
	memset(b,0,sizeof(b));
	FOR(i,1,x){
		b[s[i]]+=num[i];
		b[e[i]+1]-=num[i];
	}
	FOR(i,1,m){
		sum+=b[i];
		if(sum>a[i])
			return false;
	}
	return true;
}
int main(){
	cin>>n>>m;
	cin>>a[1];b[1]=a[1];
	FOR(i,2,n)cin>>a[i];
	FOR(i,1,m) cin>>num[i]>>s[i]>>e[i];
	r=m;
	if(check(m)){cout<<0;return 0;}
	else cout<<-1<<endl;
	while(l<r){
		ll mid=(l+r)/2;
		if(check(mid)) l=mid;
		else r=mid-1;
	}
	cout<<l+1;
	return 0;
}
2022/7/22 00:56
加载中...