我的代码(评测记录):
#include <iostream>
using namespace std;
long long n, m;
long long r[1000001], d[1000001], s[1000001], t[100001], a[1000001], pre[1000001];
bool check(long long x)
{
for (long long i = 1; i <= n; ++i)
{
a[i] = 0;
}
for (long long i = 1; i <= x; ++i)
{
a[s[i]] += d[i];
a[t[i] + 1] -= d[i];
}
for (long long i = 1; i <= n; ++i)
{
pre[i] = pre[i - 1] + a[i];
if (pre[i] > r[i])
{
return false;
}
}
return true;
}
int main()
{
cin >> n >> m;
for (long long i = 1; i <= n; ++i)
{
cin >> r[i];
}
for (long long i = 1; i <= m; ++i)
{
cin >> d[i] >> s[i] >> t[i];
}
if (check(m) == true)
{
cout << 0;
return 0;
}
long long l = 1, r = m, mid;
while (l < r)
{
mid = (l + r) / 2;
if (check(mid) == true)
{
l = mid + 1;
}
else
{
r = mid;
}
}
cout << -1 << endl << l;
return 0;
}