您的位置:首页 > 其它

个人赛2 简单思维

2017-08-28 21:27 148 查看
维斯特洛王国的地图显示,维斯特洛山脉共有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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐