维斯特洛王国的地图显示,维斯特洛山脉共有N座山组成,每一座山的海拔高度为Hi (-50000 ≤ Hi ≤ 50000)。山脉中有一些山构成山峰,山峰满足1 < i < N 且 Hi-1 < Hi > Hi+1。根据惯例,地图上需要对所有山峰进行命名和标注海拔高度。
然而,维斯特洛山脉地处颤抖海火山地震带,时有地震发生。
地震发生后,所有[L, R]区间的山都会上升P个高度(P为负时是下降)。现在小马哥接到任务要求统计出每次地震之后,维斯特洛山脉中山峰的数量。
while (scanf("%d%d", &n, &m) != EOF) {
int last = 0, x;
scanf("%d", &last);
for (int i = 1; i < n; i++) {
scanf("%d", &x);
a[i] = x - last;
last = x;
}
int cnt = 0;
for (int i = 1; i < n - 1; i++)
if (a[i] > 0 && a[i + 1] < 0)
++cnt;
while (m--) {
int l, r, p;
scanf("%d%d%d", &l, &r, &p);
if (l - 1 > 1 && a[l - 2] > 0 && a[l - 1] < 0 && a[l - 1] + p >= 0)
cnt--;
if (l - 1 > 1 && a[l - 2] > 0 && a[l - 1] >= 0 && a[l - 1] + p < 0)
cnt++;
if (l < n && a[l - 1] > 0 && a[l] < 0 && a[l - 1] + p <= 0)
cnt--;
if (l < n && a[l - 1] <= 0 && a[l] < 0 && a[l - 1] + p > 0)
cnt++;
if (l < r && a[r - 1] > 0 && a[r] < 0 && a[r] - p >= 0)
cnt--;
if (l < r && a[r - 1] > 0 && a[r] >= 0 && a[r] - p < 0)
cnt++;
if (r + 1 < n && a[r] > 0 && a[r + 1] < 0 && a[r] - p <= 0)
cnt--;
if (r + 1 < n && a[r] <= 0 && a[r + 1] < 0 && a[r] - p > 0)
cnt++;
a[l - 1] += p;
a[r] -= p;
printf("%d\n", cnt);
}
}
return 0;
}JKK