import java.util.*;
public class Main {
private static int n, m;
private static int[] rooms;
private static int[][] orders;
private static boolean check(int mid) {
long[] diff = new long[n + 2];
for (int i = 1; i <= mid; i++) {
diff[orders[i][1]] += orders[i][0];
diff[orders[i][2] + 1] -= orders[i][0];
}
long sum = 0;
for (int i = 1; i <= n; i++) {
sum += diff[i];
if (sum > rooms[i]) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
rooms = new int[n + 1];
for (int i = 1; i <= n; i++) {
rooms[i] = sc.nextInt();
}
orders = new int[m + 1][3];
for (int i = 1; i <= m; i++) {
orders[i][0] = sc.nextInt();
orders[i][1] = sc.nextInt();
orders[i][2] = sc.nextInt();
}
int left = 0, right = m;
while (left < right) {
int mid = left + right + 1 >> 1;
if (check(mid)) {
left = mid;
}
else {
right = mid - 1;
}
}
if (right == m) {
System.out.println("0");
}
else {
System.out.println("-1");
System.out.println(left + 1);
}
}
}
标签:二分,int,System,差分,mid,static,private,503,rooms
From: https://www.cnblogs.com/he0707/p/18086006/lanqiaobei01