当前位置: 首页 > news >正文

两种树状数组

单点修改,区间查询树状数组,洛谷P3374

#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
int n, m, a[N];
int chaxun(int n){int ans = 0;while(1){ans += a[n];int x = n & -n;n -= x;if(n == 0) break;}return ans;
}
void xiugai(int n, int d){while(1){a[n] += d;int x = n & -n;n += x;if(n >= N) break;}return;
}
int main(){int f, x, y;cin >> n >> m;for(int i = 1; i <= n; i++){cin >> x;xiugai(i,x);	}while(m--){cin >> f >> x >> y;if(f == 1) xiugai(x, y);if(f == 2){cout << chaxun(y) - chaxun(x-1) << endl;}}return 0;
}

区间修改,单点查询树状数组,洛谷P3368

把上面那个改成在原数组差分数组上做

#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
int n, m, s[N], a[N];
int chaxun(int n){int ans = 0;while(1){ans += s[n];int x = n & -n;n -= x;if(n == 0) break;}return ans;
}
void xiugai(int n, int d){while(1){s[n] += d;int x = n & -n;n += x;if(n >= N) break;}return;
}
int main(){int f, x, y, k;cin >> n >> m;for(int i = 1; i <= n; i++){cin >> a[i];x = a[i] - a[i-1];xiugai(i,x);	}while(m--){cin >> f;if(f == 1){cin >> x >> y >> k;xiugai(x,k);xiugai(y+1,-k);}if(f == 2){cin >> x;cout << chaxun(x) << endl;}}return 0;
}
http://www.gsyq.cn/news/23251.html

相关文章:

  • 斑马日记2025.10.17
  • 实用指南:Godot 城市模拟 – 003 根据不规则底面和高度,动态创建节点
  • 升鲜宝生鲜配送供应链管理系统---- 门店收银 POS 离线工作设计文档(支持线上线下一体化)---02
  • Python 基于Python开发的数据库同步检测工具
  • MT签名去除签名校验分析
  • day016
  • uml九图和数据流图总结
  • 第一章 应急响应- Linux入侵排查
  • 10月17号
  • 微服务组件-Eureka 科技详解
  • 微服务组件-Eureka 科技详解
  • python-IDLE定制界面大小
  • List.subList() 返回值为什么不能强转成 ArrayList
  • 洛谷 P8512
  • 从libtorch_cuda.so中提取某个函数的sass汇编指令
  • 【题解】成外友谊赛
  • 小程序商城客服系统
  • 2025.10.17
  • 一行代码清空所有 docker 容器的日志文件
  • 2024 CCPC Final F
  • ubuntu常用技巧
  • 字典树 Trie 乱讲
  • 申威(sw_64)架构下如何安装java-1.8.0-swjdk的rpm包?​
  • 实用指南:计算机毕设java基于mybatis的医用器械管理系统 基于 SSM+JavaWeb 的医用器械全流程管理平台 Java+MySQL 的医疗物资一体化系统
  • ffmpeg使用
  • 2025.10.17总结 - A
  • Ubuntu创建python桌面图标
  • Nimble:让SwiftObjective-C测试变得更优雅的匹配库 - 指南
  • 【Linux】基础 I/O - 指南
  • DIVCNT