You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1008 B
C++
43 lines
1008 B
C++
#include <cstdio>
|
|
#include <cctype>
|
|
#include <cstring>
|
|
#include <cstdint>
|
|
void getint(int& x)
|
|
{
|
|
x = 0;
|
|
int ch;
|
|
while (!isdigit(ch = getchar()));
|
|
while (isdigit(ch))
|
|
x = x * 10 + ch - '0',
|
|
ch = getchar();
|
|
}
|
|
int n, m, r[1000001], d[1000001], s[1000001], t[1000001];
|
|
int64_t a[1000001];
|
|
bool check(int x)
|
|
{
|
|
memset(a, 0, sizeof(a));
|
|
for (int i = 1; i <= x; i++)
|
|
a[s[i]] += d[i], a[t[i] + 1] -= d[i];
|
|
for (int i = 1; i <= n; i++)
|
|
{
|
|
a[i] += a[i - 1];
|
|
if (a[i] > r[i]) return false;
|
|
}
|
|
return true;
|
|
}
|
|
int main()
|
|
{
|
|
getint(n), getint(m);
|
|
for (int i = 1; i <= n; i++) getint(r[i]);
|
|
for (int i = 1; i <= m; i++) getint(d[i]), getint(s[i]), getint(t[i]);
|
|
int _l = 0, _r = m + 1, _m;
|
|
while (_l < _r)
|
|
{
|
|
_m = (_l + _r) >> 1;
|
|
if (check(_m)) _l = _m + 1;
|
|
else _r = _m;
|
|
}
|
|
if (_r == m + 1) putchar('0');
|
|
else printf("-1\n%d", _l);
|
|
return 0;
|
|
} |