树状数组 ( 基础篇 )——敌兵布阵 ( HDU 1166 )
来源:互联网 发布:双轨制对碰算法php 编辑:程序博客网 时间:2024/05/16 04:37
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1166分析:
输入一堆数,范围小于50000,要求对其进行修改具体元素,区间求和两种操作。一看就是树状数组。题解:
先来一发树状数组的基本模板:
int TreeArray[40005],N;int lowbit(int i)//lowB操作!!!{ return i & (-i);//求出2^p次,p为i的二进制数中,从右往左数第一个1的位置(从0开始数)}void Add(int loc, int value)//将loc位置的元素+=value{ while(loc<N) { TreeArray[loc] += value; loc += lowbit(loc); }}int Sum(int loc)//求前loc项的元素和{ int ans = 0; while(loc>0) { ans += TreeArray[loc]; loc -= lowbit[loc]; } return ans;}
然后这题就做完了QAQ
- AC代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define LEN 50004using namespace std;int lowbit(int k){ return k&(-k);}int e[LEN];void add(int k, int v) //第K个元素加上v{ while(k<LEN) { e[k] += v; k += lowbit(k); }}int sum(int k) //求前k项的和{ int re=0; while(k>0) { re += e[k]; k -= lowbit(k); } return re;}char op[5];int n;int main(){ int T,tt=1; int i,j; scanf("%d", &T); while(T--) { scanf("%d", &n); memset(e, 0, sizeof(e)); for( i=1; i<=n; i++) { scanf("%d", &j); add(i, j); } printf("Case %d:\n", tt++); while( scanf("%s", op) && op[0] != 'E') { scanf("%d%d", &i, &j); if(op[0] == 'Q') { printf("%d\n", sum(j) - sum(i-1)); }else if(op[0] == 'A') { add(i, j); } else add(i, -j); } }}
0 0
- 树状数组 ( 基础篇 )——敌兵布阵 ( HDU 1166 )
- HDU 1166 | 敌兵布阵 —— 树状数组
- hdu(1166):敌兵布阵—树状数组的应用
- HDU 1166 敌兵布阵(树状数组,基础)
- hdu 1166 敌兵布阵 (树状数组)
- (树状数组) hdu 1166 敌兵布阵
- HDU 1166 敌兵布阵【树状数组】
- HDU-1166-敌兵布阵(树状数组)
- hdu 1166 敌兵布阵 <树状数组>
- hdu 1166 敌兵布阵(裸树状数组)
- hdu - 1166 - 敌兵布阵(树状数组)
- hdu 1166 敌兵布阵【树状数组入门】
- hdu 1166 敌兵布阵 树状数组
- hdu hdoj 1166 敌兵布阵 树状数组
- HDU--1166 -- 敌兵布阵 [树状数组]
- hdu 1166 敌兵布阵 (树状数组)
- HDU 1166 - 敌兵布阵(树状数组)
- 树状数组-再说敌兵布阵(HDU 1166)
- URL中查询字符串是什么意思
- cocos2d-x + vs2015 android游戏开发环境搭建 及 新建项目
- 【C语言】实例:整齐地输出n的平方,立方
- 正确使用goto语句
- php各种排序
- 树状数组 ( 基础篇 )——敌兵布阵 ( HDU 1166 )
- DIY 跟据日期计算星期几
- Jquery实现文本框得到焦点的时候,文本框的焦点出现在最后!
- Android 自定义View-图片文字变色,实现酷炫LoadingView或者进度条
- 获取Map中的所有value
- linux(centos)设置静态IP
- xss注入1.0
- 简洁Python命名规范
- Android仿QQ好友详情页-下拉顶部图片缩放效果