1 条题解
-
0
差分
用差分算出每个房子经过的次数,计算出每个房子路过的花费,比较购买花费和路过花费选择更小的加入答案。
#include <iostream> #include <algorithm> using namespace std; const int N = 1e5 + 10; long long n, p[N], a[N], b[N], d[N]; int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> p[i]; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) cin >> b[i]; for (int i = 1; i <= n; i++) { int l = min(p[i - 1], p[i]), r = max(p[i - 1], p[i]); if (p[i - 1] == l) { d[l + 1]++; d[r + 1]--; } else { d[l]++; d[r]--; } } d[p[n] + 1]++; d[n + 1]--; long long res = 0; for (int i = 1; i <= n; i++) { d[i] += d[i - 1]; res += min(a[i], b[i] * d[i]); } cout << res; return 0; }
- 1
信息
- ID
- 483
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 31
- 已通过
- 3
- 上传者