1 条题解

  • 0
    @ 2026-9-30 12:36:10

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    long long n,m,k,w,mid;
    long long d[1000005],s[1000005],j[1000005],r[1000005];
    long long cf[1000005],rr[1000005];
    bool bz;
    bool check(long long a)
    {	
    	/*cout<<"---"<<endl;
    	cout<<a<<endl;*/
    	memset(cf,0,sizeof(cf));
    	for(int i=1;i<=a;++i)
    	{
    		cf[s[i]]+=d[i];
    		cf[j[i]+1]-=d[i];
    	}
    	/*for(int i=1;i<=n;++i)
    	{
    		cout<<cf[i]<<" ";
    	}
    	cout<<endl;*/
    	for(int i=1;i<=n;++i)
    	{
    		rr[i]=rr[i-1]+cf[i];
    		//cout<<rr[i]<<" ";
    		if(rr[i]>r[i]) return 0;
    	}
    	return 1;
    }
    int main(){
        cin>>n>>m;
        for(int i=1;i<=n;++i)
        {
        	scanf("%lld",&r[i]);
        }
        
        for(int i=1;i<=m;++i)
        {
        	scanf("%lld %lld %lld",&d[i],&s[i],&j[i]);
        	if(s[i]>j[i]) swap(s[i],j[i]);
        }
        k=0;w=n+1; 
        while(k+1<w)
        {
        	mid=(k+w)/2;
        	if (check(mid)) k=mid;
        		else w=mid;
        	/*cout<<k<<" "<<w<<endl;
        	cout<<"---"<<endl;*/
        }
        if(w==n+1) cout<<0;
    		else cout<<-1<<endl<<w; 
        return 0;
    }
    
    
    • 1

    信息

    ID
    2621
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者