1 条题解

  • 0
    @ 2024-12-7 16:20:37
    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define N 1000005
    
    ll a[N], b[N];
    struct P {
        int d, x, y;
    } p[N];
    
    int n, m;
    
    bool check(int mid) {//肌肉👍
        memset(b, 0, sizeof(b));
    
        for (int j = 1; j <= mid; j++) {
            b[p[j].x] -= p[j].d;
            b[p[j].y + 1] += p[j].d;
        }
    
        for (int i = 1; i <= n; i++) {
            b[i] += b[i - 1];
            if (a[i] + b[i] < 0) return true;
        }
        return false;
    }
    
    int main() {
        
        cin >> n >> m;//唐人输入
        
        for (int i = 1; i <= n; i++) {
            cin >> a[i]; 
        }
        
        for (int j = 1; j <= m; j++) {
            cin >> p[j].d >> p[j].x >> p[j].y;
        }
        
        int l = 1, r = m + 1;
        while (l < r) {//二分之1
            int mid = (l + r) / 2; 
            if (check(mid)) {
                r = mid; 
            } else {
                l = mid + 1;
            }
        }
        
        if (l == m + 1) cout << 0; 
        else cout << -1 << "\n" << l; //乐子之输出
    }
    

    信息

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