structnode { int left, right, weight; } arr[1000010];
longlongint f[1000010], n, m, a[1000010];
boolcheck( int day ) { longlongint sum = 0; memset(f, 0, sizeof(f)); for ( int i = 1; i <= day; i ++ ) { f[arr[i].left] += arr[i].weight; f[arr[i].right+1] -= arr[i].weight; } for ( int i = 1; i <= n; i ++ ) { sum += f[i]; if ( sum > a[i] ) return0; } return1; }
intmain() {
scanf("%lld %lld", &n, &m); for ( int i = 1; i <= n; i ++ ) scanf("%lld", &a[i]); for ( int i = 1; i <= m; i ++ ) scanf("%d %d %d", &arr[i].weight, &arr[i].left, &arr[i].right); if ( check(m) ) { printf("0\n"); return0; } int left = 1, right = m; while ( right > left ) { int mid = ( left + right ) / 2; if ( check(mid) ) left = mid + 1 ; else right = mid; } //cout << left << ' '<<right <<endl; printf("-1\n%d\n",right);
int a, b, c, d; constint maxn = 1000080; longlongint arr[maxn+1];
intmain() { scanf("%d %d %d %d", &a, &b, &c, &d); memset(arr, 0, sizeof(arr)); for ( int i = a; i <= b; i ++ ) { arr[b + i] ++; arr[c + i + 1] --; } for ( int i = 1; i <= maxn; i ++ ) arr[i] += arr[i-1]; //求两边和为i的项目的个数 for ( int i = 1; i <= maxn; i ++ ) arr[i] += arr[i-1]; //前缀和 longlongint sum = 0; for ( int i = c; i <= d; i ++ ) sum += ( arr[maxn] - arr[i] ); printf("%lld\n",sum); return0; }