HDU-1166-敌兵布阵(线段树)(树状数组)
- 线段树(kuangbin本题链接)
#include "bits/stdc++.h" using namespace std; const int MAXN = 50010; struct Node { int l, r; int sum; } segTree[MAXN * 4]; void build(int i, int l, int r) { segTree[i].l = l; segTree[i].r = r; if (l == r) { scanf("%d", &segTree[i].sum); return; } int mid = l + r >> 1; build(i << 1, l, mid); build(i << 1 | 1, mid + 1, r); segTree[i].sum = segTree[i << 1].sum + segTree[i << 1 | 1].sum; } void add(int i, int k, int v) { segTree[i].sum += v; if (segTree[i].l == segTree[i].r) return; int mid = segTree[i].l + segTree[i].r >> 1; if (k <= mid) add(i << 1, k, v); else add(i << 1 | 1, k, v); } int query(int i, int l, int r) { if (segTree[i].l == l && segTree[i].r == r) return segTree[i].sum; int mid = segTree[i].l + segTree[i].r >> 1; if (r <= mid) return query(i << 1, l, r); else if (l > mid) return query(i << 1 | 1, l, r); else return query(i << 1, l, mid) + query(i << 1 | 1, mid + 1, r); } int main() { int t, n; char op[10]; scanf("%d", &t); for (int ca = 1; ca <= t; ca++) { printf("Case %d:\n", ca); scanf("%d", &n); build(1, 1, n); int x, y; while (scanf("%s", op) && op[0] != 'E') { scanf("%d%d", &x, &y); if (op[0] == 'Q') printf("%d\n", query(1, x, y)); else if (op[0] == 'A') add(1, x, y); else add(1, x, -y); } } return 0; }
修改自2019年6月6日,删除了原先的线段树代码,原先不喜欢用结构体定义线段树的节点,现在感觉到用结构体代码清晰一点。模仿的kuangbin模板。
- 树状数组
#include"cstdio" #include"cstring" using namespace std; int tree[50005],N,x,y; //用来求x二进制码从右往左数第一个1所在位的值 int lowbit(int x){ return x&-x; } void Add(int x){ while(x<=N){ tree[x]+=y; x+=lowbit(x); } } int Query(int x){ int ans=0; while(x){ ans+=tree[x]; x-=lowbit(x); } return ans; } int main(){ int T;char s[10]; scanf("%d",&T); for(int k=1;k<=T;k++){ memset(tree,0,sizeof(tree)); scanf("%d",&N); for(int i=1;i<=N;i++){ scanf("%d",&y); Add(i); } printf("Case %d:\n",k); while(scanf("%s",s)&&s[0]!='E'){ scanf("%d%d",&x,&y); if(s[0]=='Q')printf("%d\n",Query(y)-Query(x-1)); else { if(s[0]=='S')y=-y; Add(x); } } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次SSD性能瓶颈排查之路——寿命与性能之间的取舍
· 理解 .NET 结构体字段的内存布局
· .NET 9中的异常处理性能提升分析:为什么过去慢,未来快
· 字符集、编码的前世今生
· Web性能优化:从 2 秒到200毫秒
· 【故障公告】博客主站遭遇很奇怪的疯狂攻击
· 我与博客园的20年
· 一个老程序员, 两个小时能用corsur做出什么样的东西
· 刚刚,Cursor 1.0炸裂发布!4大亮点实战
· SQL Server 2025 预览版新功能点评