HDU (线段树 单点更新) 敌兵布阵
2024-08-30 01:07:20
哎,又切了一天的水题。
线段树果然必须自己写出来才能叫真正的会了,之前一直在套模板确实不好。
这个题目是单点更新 之 单点增减,= ̄ω ̄=
#include <cstdio> const int maxn = ( << ); int n, qL, qR, p, v, sum[maxn]; void build(int o, int L, int R)
{
if(L == R) { scanf("%d", &sum[o]); return; }
int M = (L + R) / ;
build(o*, L, M);
build(o*+, M+, R);
sum[o] = sum[o*] + sum[o*+];
} void update(int o, int L, int R)
{
if(L == R) { sum[o] += v; return; }
int M = (L + R) / ;
if(p <= M) update(o*, L, M);
else update(o*+, M+, R);
sum[o] = sum[o*] + sum[o*+];
} int query(int o, int L, int R)
{
if(qL <= L && qR >= R) return sum[o]; int ans = ;
int M = (L +R) / ;
if(qL <= M) ans += query(o*, L, M);
if(qR > M) ans += query(o*+, M+, R);
return ans;
} char cmd[]; int main()
{
//freopen("in.txt", "r", stdin); int T; scanf("%d", &T); for(int kase = ; kase <= T; kase++)
{
printf("Case %d:\n", kase); scanf("%d", &n);
build(, , n); while(scanf("%s", cmd) == )
{
if(cmd[] == 'E') break;
if(cmd[] == 'Q')
{
scanf("%d%d", &qL, &qR);
printf("%d\n", query(, , n));
}
else
{
scanf("%d%d", &p, &v);
if(cmd[] == 'S') v = -v;
update(, , n);
}
}
} return ;
}
代码君
最新文章
- IOS开发基础知识--碎片14
- AD_TLC549采集模拟信号
- 获取$(this)子节点对象的方法
- Ztree 随笔记
- vue-cli + webpack 多页面实例应用
- android:descendantFocusability=”blocksDescendants”的用法
- IDS IPS WAF之安全剖析
- C#入门篇6-9:字符串操作 不值一提的函数【不看也行】
- DirectX截图黑屏的解决办法
- Directx11学习笔记【十三】 实现一个简单地形
- 清理out的浏览器收藏夹发现的
- javascript中的栈、队列。
- hibernate一级缓存及对象的状态
- 11.13 Daily Scrum
- Pytorch中的torch.cat()函数
- Codeforces Round #319 (Div. 2) D - Invariance of Tree
- LOJ.6281.数列分块入门5(分块 区间开方)
- 2018 USP Try-outsF - Optimizing Transportation in Portugal
- 前端通信:ajax设计方案(七)--- 增加请求错误监控、前端负载均衡以、请求宕机切换以及迭代问题修复
- HBase写入性能改造(续)--MemStore、flush、compact参数调优及压缩卡的使用【转】