P9130 [USACO23FEB] Hungry Cow P (动态开点线段树+线段树二分)
P9130 [USACO23FEB] Hungry Cow P
动态开点线段树+线段树二分
考虑线段树。
首先区间范围是
考虑合并,需要维护每个区间留下的稻草
对于
对于
首先
若
否则,
每次只会递归一半,所以
#include <bits/stdc++.h>
#define pii std::pair<int, int>
#define fi first
#define se second
#define pb push_back
typedef long long i64;
const int N = 10000010, mod = 1000000007, inv2 = 500000004;
i64 tot = 1;
struct seg {
i64 ls, rs;
i64 left, blank, ans;
} t[N];
void crea(i64 &u, i64 l, i64 r) {
if(u) return;
u = ++tot;
t[u].blank = r - l + 1;
t[u].left = 0;
t[u].ans = 0;
}
void pushup(i64 u, i64 l, i64 r) {
i64 mid = (l + r) >> 1;
t[u].left = std::max(0ll, std::max(0ll, t[t[u].ls].left - std::min(r - mid, t[t[u].rs].blank)) + t[t[u].rs].left);
t[u].blank = std::max(0ll, std::min(mid - l + 1, t[t[u].ls].blank) + std::max(0ll, std::min(r - mid, t[t[u].rs].blank) - t[t[u].ls].left));
}
i64 query(i64 &u, i64 l, i64 r, i64 x) {
if(l == r) return (x ? l % mod : t[u].ans);
i64 mid = (l + r) >> 1;
if(x <= std::min(mid - l + 1, t[t[u].ls].blank)) return (query(t[u].ls, l, mid, x) + (t[u].ans - t[t[u].ls].ans + mod) % mod) % mod;
return (((l + mid) % mod * ((mid - l + 1) % mod) % mod * inv2 % mod) + query(t[u].rs, mid + 1, r, x - std::min(mid - l + 1, t[t[u].ls].blank) + t[t[u].ls].left)) % mod;
}
void update(i64 &u, i64 l, i64 r, i64 x, i64 y) {
crea(u, l, r);
if(l == r) {
if(!y) t[u].left = 0, t[u].blank = 1, t[u].ans = 0;
else t[u].left = y - 1, t[u].blank = 0, t[u].ans = l % mod;
return;
}
i64 mid = (l + r) >> 1;
if(x <= mid) update(t[u].ls, l, mid, x, y);
else update(t[u].rs, mid + 1, r, x, y);
pushup(u, l, r);
t[u].ans = (t[t[u].ls].ans + query(t[u].rs, mid + 1, r, t[t[u].ls].left)) % mod;
}
i64 n, rt = 1;
void Solve() {
std::cin >> n;
t[1].blank = t[0].blank = 2e14;
for(int i = 1; i <= n; i++) {
i64 a, b;
std::cin >> a >> b;
update(rt, 1, 2e14, a, b);
std::cout << t[rt].ans << "\n";
}
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
Solve();
return 0;
}
标签:
线段树
Buy me a cup of coffee ☕.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具