1 条题解

  • 0
    @ 2026-7-5 10:17:57
    
    ```cpp
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int MAXN = 1e6 + 10;
    
    int n, m;
    ll r[MAXN];
    ll d[MAXN], s[MAXN], t[MAXN];
    ll diff[MAXN];
    bool check(int mid)
    {
        memset(diff, 0, sizeof(diff));
        for(int i = 1; i <= mid; ++i)
        {
            diff[s[i]] += d[i];
            diff[t[i] + 1] -= d[i];
        }
        ll sum = 0;
        for(int i = 1; i <= n; ++i)
        {
            sum += diff[i];
            if(sum > r[i]) return false;
        }
        return true;
    }
    inline ll read()
    {
        ll x = 0, f = 1;
        char ch = getchar();
        while(ch < '0' || ch > '9')
        {
            if(ch == '-') f = -1;
            ch = getchar();
        }
        while(ch >= '0' && ch <= '9')
        {
            x = (x << 3) + (x << 1) + (ch ^ 48);
            ch = getchar();
        }
        return x * f;
    }
    
    int main()
    {
        n = read(), m = read();
        for(int i = 1; i <= n; ++i) r[i] = read();
        for(int i = 1; i <= m; ++i)
        {
            d[i] = read();
            s[i] = read();
            t[i] = read();
        }
    
        int l = 1, r = m, ans = 0;
        while(l <= r)
        {
            int mid = (l + r) / 2;
            if(check(mid))
            {
                l = mid + 1;
            }
            else
            {
                ans = mid;
                r = mid - 1;
            }
        }
        if(ans == 0) cout << 0 << endl;
        else
        {
            cout << -1 << endl;
            cout << ans << endl;
        }
        return 0;
    }
    

信息

ID
3435
时间
1000ms
内存
256MiB
难度
9
标签
递交数
37
已通过
4
上传者