博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1166 敌兵布阵 树状数组
阅读量:5342 次
发布时间:2019-06-15

本文共 1533 字,大约阅读时间需要 5 分钟。

题目链接:

hdu:

题意:

单点更新,成段查询。

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 7 typedef long long LL; 8 9 const int maxn = 5e4+10;10 11 int sum[maxn];12 int n;13 14 void init() {15 memset(sum, 0, sizeof(sum));16 }17 18 void add(int p, int v) {19 while (p < maxn) {20 sum[p] += v;21 p += p&-p;22 }23 }24 25 int get_sum(int p) {26 int ret = 0;27 while (p > 0) {28 ret += sum[p];29 p -= p&-p;30 }31 return ret;32 }33 34 int main() {35 int T,kase=0;36 scanf("%d", &T);37 while (T--) {38 init();39 scanf("%d", &n);40 for (int i = 1; i <= n; i++) {41 int x;42 scanf("%d", &x);43 add(i, x);44 }45 printf("Case %d:\n", ++kase);46 char cmd[11];47 while (scanf("%s", cmd) == 1&&cmd[0]!='E') {48 if (cmd[0] == 'Q') {49 int l, r;50 scanf("%d%d", &l, &r);51 printf("%d\n", get_sum(r) - get_sum(l - 1));52 }53 else if (cmd[0] == 'A') {54 int p, v;55 scanf("%d%d", &p, &v);56 add(p, v);57 }58 else if (cmd[0] == 'S') {59 int p, v;60 scanf("%d%d", &p, &v);61 add(p, -v);62 }63 }64 }65 return 0;66 }

 

转载于:https://www.cnblogs.com/fenice/p/5425989.html

你可能感兴趣的文章
京东静态网页练习记录
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>
Solr4.8.0源码分析(5)之查询流程分析总述
查看>>
[Windows Server]安装系统显示“缺少计算机所需的介质驱动程序”解决方案
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
Lucene 学习之二:数值类型的索引和范围查询分析
查看>>
软件开发工作模型
查看>>
Java基础之字符串匹配大全
查看>>
面向对象
查看>>
lintcode83- Single Number II- midium
查看>>
移动端 响应式、自适应、适配 实现方法分析(和其他基础知识拓展)
查看>>
selenium-窗口切换
查看>>
使用vue的v-model自定义 checkbox组件
查看>>
[工具] Sublime Text 使用指南
查看>>
Hangfire在ASP.NET CORE中的简单实现方法
查看>>
Algorithm——何为算法?
查看>>
Web服务器的原理
查看>>