比赛 进阶指南第0章测试 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 借教室 最终得分 100
用户昵称 dbk 运行时间 4.058 s
代码语言 C++ 内存使用 6.56 MiB
提交时间 2026-03-14 10:35:51
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n, m, l = 0, r;
int d[N], si[N], sj[N], diff[N], rr[N];
bool check(int x){
    for(int i = 1;i <= n + 5;i++) diff[i] = 0;
    for(int i = 1;i <= x;i++){
        diff[si[i]] -= d[i];
        diff[sj[i] + 1] += d[i];
    }
    for(int i = 1;i <= n;i++){
        diff[i] += diff[i - 1];
        if(diff[i] + rr[i] < 0){
            return 0;
        }
    }
    return 1;
}
int main(){
    freopen("classrooms.in", "r", stdin);
    freopen("classrooms.out", "w", stdout);
    cin >> n >> m;
    r = m;
    for(int i = 1;i <= n;i++) cin >> rr[i];
    for(int i = 1;i <= m;i++){
        cin >> d[i] >> si[i] >> sj[i];
    }
    while(l < r){
        int mid = (l + r + 1) >> 1;
        if(check(mid)){
            l = mid;
        }
        else{
            r = mid - 1;
        }
    } 
    if(l == m) cout<<0<<endl;
    else cout<<-1<<endl<<l + 1<<endl;
    return 0;
}