#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 5;
int n , m , r[N] , d[N] , s[N] , t[N] , di[N] , ans[N];
bool check(int mid){
for(int i = 1;i <= n;i++)di[i] = 0;
for(int i = 1;i <= mid;i++){
di[s[i]] += d[i];
di[t[i] + 1] -= d[i];
}
for(int i = 1;i <= n;i++){
ans[i] = ans[i - 1] + di[i];
if(ans[i] > r[i])return false;
}
return true;
}
signed main(){
cin >> n >> m;
for(int i = 1;i <= n;i++)cin >> r[i];
for(int i = 1;i <= m;i++)cin >> d[i] >> s[i] >> t[i];
if(check(m)){
cout << 0;
return 0;
}
int l = 1 , r = m;
while(l != r){
int mid = l + r + 1 >> 1;
if(check(mid))l = mid;
else r = mid - 1;
}
cout << -1 << '\n' << l + 1;
return 0;
}
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 5;
int n , m , r[N] , d[N] , s[N] , t[N] , di[N] , ans[N];
bool check(int mid){
for(int i = 1;i <= n;i++)di[i] = 0;
for(int i = 1;i <= mid;i++){
di[s[i]] += d[i];
di[t[i] + 1] -= d[i];
}
for(int i = 1;i <= n;i++){
ans[i] = ans[i - 1] + di[i];
if(ans[i] > r[i])return false;
}
return true;
}
signed main(){
cin >> n >> m;
for(int i = 1;i <= n;i++)cin >> r[i];
for(int i = 1;i <= m;i++)cin >> d[i] >> s[i] >> t[i];
if(check(m)){
cout << 0;
return 0;
}
int l = 1 , r = m;
while(l != r){
int mid = l + r >> 1;
if(check(mid))l = mid + 1;
else r = mid;
}
cout << -1 << '\n' << l;
return 0;
}
为什么第一份代码95pts,第二份100pts