#include <bits/stdc++.h>
using namespace std;
typedef struct bo
{
long long int num, sx, tx;
} b;
long long cl[1000005];
bool check(long long int n, long long cl[], long long int mid, b *p)
{
vector<long long int>diff(n+1,0);
vector<long long int>a(n+1,0);
for (long long int i = 1; i <= mid; i++)
{
diff[p[i].sx] += p[i].num;
if (p[i].tx < n)
{
diff[p[i].tx + 1] -= p[i].num;
}
}
a[1] = diff[1];
for (long long int i = 2; i <= n; i++)
{
a[i] = a[i - 1] + diff[i];
if(a[i]>cl[i])return false;
}
// for(int i=1;i<=n;i++){
// cout<<cl[i]<<" ";
// }cout<<mid<<endl;
diff.clear();a.clear();
return true;
}
int main()
{
long long int n, m;
cin >> n >> m;
for (long long int i = 1; i <= n; i++)
{
cin >> cl[i];
}
b p[n + 1];
for (long long int i = 1; i <= m; i++)
{
cin >> p[i].num >> p[i].sx >> p[i].tx;
}
long long int left = 1;
long long int right = m;
if (check(n, cl, right, p))
{
cout <<0<<endl;
}
else
{
cout << -1 << endl;
while (left < right)
{
long long int mid = (left + right) / 2;
if (check(n, cl, mid, p))
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
while(!check(n,cl,right,p)){
right--;
}cout<<right+1<<endl;
}return 0;
}
全改成long long 数组又超时,这个点搞我啊....