问题转化 题目的核心条件是蓝色盒子的金币总和 blue(l,r) 大于红色盒子的金币总和 red(l,r)。我们可以将这个不等式进行移项,得到: blue(l,r)−red(l,r)>0 这个形式启发我们去构造一个新的数组,使得新数组的区间和恰好等于 blue(l,r)−red(l,r)。
构造新数组与前缀和 我们可以定义一个新数组 c,其元素 ci 的值与原数组 ai 所在的盒子颜色有关:
小 A 面前摆放着一排编号为 1 到 n 的盒子,第 i 个盒子中有 ai 枚金币。这些盒子按照位置交替被涂成红色和蓝色:位置 1 的盒子是红色,位置 2 是蓝色,位置 3 又是红色……如此交替。
对于一段连续的盒子 [l,r](1≤l≤r≤n),我们定义蓝色盒子的金币总和减去红色盒子的金币总和为该区间的「净收益」。如果某个区间的净收益大于 0,则小 A 称这段区间为「优质区间」。请帮助小 A 计算一共有多少个优质区间。
可以存在多组测试数据。数据规模保证:测试数据组数 T 满足 1≤T≤104。对于每组数据,数组长度 n 满足 1≤n≤2×105,且所有测试数据的 n 之和不超过 2×105。每个盒子的金币数 ai 满足 1≤ai≤109。
第一行包含一个整数 T,表示测试数据组数。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册