[COCI2015-2016#2] VUDU
[COCI2015-2016#2] VUDU
题意
求一个序列中有多少个子段平均数大于
思路
区间和相关的问题可以考虑前缀和。
对于原序列前缀和序列
移项整理得:
令
坑点:实现时要往树状数组中先插入
代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e6 + 5;
int n, tot;
ll ans, a[N], b[N], P;
struct BIT {
ll t[N];
void add(int x, ll y) {
for (int i = x; i <= n + 1; i += i & (-i)) {
t[i] += y;
}
}
ll query(int x) {
ll res = 0;
for (int i = x; i; i -= i & (-i)) {
res += t[i];
}
return res;
}
} T;
int main() {
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
a[i] += a[i - 1];
}
cin >> P;
for (int i = 1; i <= n; i ++) {
a[i] -= 1ll * i * P;
b[++ tot] = a[i];
}
b[++ tot] = 0;
sort(b + 1, b + tot + 1);
tot = unique(b + 1, b + tot + 1) - b - 1;
for (int i = 0; i <= n; i ++) {
a[i] = lower_bound(b + 1, b + tot + 1, a[i]) - b;
}
T.add(a[0], 1);
for (int i = 1; i <= n; i ++) {
ans += T.query(a[i]);
T.add(a[i], 1);
}
cout << ans << "\n";
return 0;
}
本文来自博客园,作者:maniubi,转载请注明原文链接:https://www.cnblogs.com/maniubi/p/18429958,orz
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】