HDU 1698 Just a Hook [线段树+区间修改为一个值+区间查询]
一、经验总结
- 是杭州电子科技大学的简称,是北京大学简称
- 因读入量较大,使用
cin
读入直接TLE
,换用scanf
后AC
,看来能用scanf
最好以后用scanf
! - 和不支持万能头文件,需要小心替换库文件
二、题目理解
给你一个长 的序列,初始值全为 , 次操作,每次将 的值改为 ,问最后整个序列的和为多少?
三、实现代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 100010;
int n, q;
struct Node {
int l, r;
LL sum;
int tag;
} tr[N << 2];
void pushup(int u) {
tr[u].sum = tr[u << 1].sum + tr[u << 1 | 1].sum;
}
void bulid(int u, int l, int r) {
tr[u] = {l, r};
if (l == r) {
tr[u].sum = 1;
return;
}
int mid = (l + r) >> 1;
bulid(u << 1, l, mid), bulid(u << 1 | 1, mid + 1, r);
pushup(u);
}
void pushdown(int u) {
Node &root = tr[u], &ls = tr[u << 1], &rs = tr[u << 1 | 1];
if (root.tag) { // 如果懒标记不为零,需要向儿子们传递懒标记
ls.tag = root.tag, ls.sum = (LL)(ls.r - ls.l + 1) * root.tag;
rs.tag = root.tag, rs.sum = (LL)(rs.r - rs.l + 1) * root.tag;
root.tag = 0; // 清空懒标记
}
}
void modify(int u, int l, int r, int v) {
if (l <= tr[u].l && tr[u].r <= r) {
tr[u].sum = (LL)v * (tr[u].r - tr[u].l + 1);
tr[u].tag = v;
return;
}
pushdown(u); // 没有完全覆盖则分裂
int mid = (tr[u].l + tr[u].r) >> 1;
if (l <= mid) modify(u << 1, l, r, v);
if (r > mid) modify(u << 1 | 1, l, r, v);
pushup(u);
}
LL query(int u, int l, int r) {
if (l > tr[u].r || r < tr[u].l) return 0; // 递归出口,不在我管辖范围内的情况,返回0
if (l <= tr[u].l && tr[u].r <= r) return tr[u].sum; // 完整区间覆盖,返回区间和
// 没有完全命中,开始分裂
pushdown(u);
// 左边+右边
return query(u << 1, l, r) + query(u << 1 | 1, l, r);
}
int main() {
// 加快读入
ios::sync_with_stdio(false), cin.tie(0);
int T;
cin >> T;
int cas = 1;
while (T--) {
cin >> n; // 线段的区间[1~n]
memset(tr, 0, sizeof tr); // 因树状数组多次使用,每次需要清空
bulid(1, 1, n); // 构建树状数组
cin >> q;
while (q--) {
int l, r, d;
cin >> l >> r >> d;
modify(1, l, r, d);
}
printf("Case %d: The total value of the hook is %lld.\n", cas++, query(1, 1, n));
}
return 0;
}
分类:
线段树
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2017-04-24 NumPy、SciPy 等Python包在Windows下的whl安装包下载
2013-04-24 在Intellij IDEA 12中Tomcat无法调试
2013-04-24 Windows版Redis下载与使用