| 比赛 |
进阶指南第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;
}