5分求调,AC#3#21
查看原帖
5分求调,AC#3#21
1260978
xycsc23楼主2025/1/1 15:19

rt,代码如下:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pr pair<int,int>
#define mr(x, y) make_pair((x), (y))
#define fi first
#define se second
inline int read(){
	int f=1, s=0;
	char c=getchar();
	while((c<'0' || c>'9') && c!='-')c=getchar();
	if(c=='-')
		f=-1, c=getchar();
	while(c>='0' && c<='9')s=s*10+c-'0', c=getchar();
	return f*s;
}
inline void pu(int x){
	if(x<0){
		putchar('-');
	    pu(-x);
	}
	else if(x<10)
		putchar(x+'0');
	else{
		pu(x/10);
		putchar(x%10+'0');
	}
}
struct dd{
	int l;
	int r;
	int c;
}a[1000005];
int b[1000005];
int cf[1000005];
int n;
int f(int m){
	memset(cf, 0, sizeof cf);
	for(int i=0;i<m;i++)
		cf[a[i].l]+=a[i].c, cf[a[i].r+1]-=a[i].c;
	for(int s=0, i=0;i<n;i++){
		s+=cf[i];
		if(s>b[i])
			return false;
	}
	return true;
}
signed main(){
	n=read();
	int m=read();
	for(int i=0;i<n;i++)
		b[i]=read();
	for(int i=0;i<m;i++)
		a[i].c=read(), a[i].l=read(), a[i].r=read();
	if(f(m)){
		pu(0);
		return 0;
	}
	int ans=0;
	for(int l=0, r=m;l<=r;){
		int mid=l+(r-l)/2;
		if(f(mid))
			ans=mid, l=mid+1;
		else
			r=mid-1;
	}
	pu(-1);
	putchar('\n');
	pu(ans+1);
	return 0;
}
2025/1/1 15:19
加载中...