10分求调,感觉逻辑没问题啊
查看原帖
10分求调,感觉逻辑没问题啊
1255103
cjwksjykr楼主2024/7/27 22:40
#include<iostream>
#include<string>

using namespace std;

long long m,n;
long long d[1000003],s[1000003],t[1000003];
long long num[1000003]={0};

int check(long long x)
{
    long long ans=0;
    for(int i=1;i<=x;i++)
    {
        num[s[i]]-=d[i];
        num[t[i]+1]+=d[i];
    }
    for(int i=1;i<=n;i++)
    {
        ans+=num[i];
        if(ans<0)
        {
            for(int j=1;j<=x;j++)
            {
                num[s[j]]+=d[j];
                num[t[j]+1]-=d[j];
            }
            return 0;
        }
    }
    return 1;
}

int main()
{
    int x=0,y;
    cin>> n >> m;
    for(int i=1;i<=n;i++)
    {
        cin>> y;
        num[i]=y-x;
        x=y;
    }
    for(int i=1;i<=m;i++)
    {
        cin>> d[i] >> s[i] >> t[i];
    }
    long long l=1,r=m;
    long long mid;
    while(l <= r)
    {
        mid = (l + r) >> 1;
        if(check(mid)) l=mid+1;
        else r=mid-1;
    }
    if(l>m) cout<< 0;
    else
    {
        cout<< -1 << endl;
        cout<< l;
    }
    return 0;
}

2024/7/27 22:40
加载中...