2017-07-14:树状数组(多组数据要先清空)
2017-07-14 09:57
302 查看
树状数组:
找x的二进制末尾有几个0
加入数(减去数就是加入它的负数)
查询区间:
敌兵布阵:HDU:P1166
找x的二进制末尾有几个0
inline int lowbit(int x){ return x&(-x); }
加入数(减去数就是加入它的负数)
inline void add(int x,int v){ while(x<=n){ e[x]+=v; x+=lowbit(x); } }
查询区间:
cout<<query(h)-query(g-1)<<endl; inline int query(int x){ int ans=0; while(x>=1){ ans+=e[x]; x-=lowbit(x); } return ans; }
敌兵布阵:HDU:P1166
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<ctime> #include<cctype> #include<string> #include<algorithm> #include<iostream> using namespace std; int t,n,a,e[50010]; char ch[7]; inline int readin(){ int x=0,p=1; char ch=getchar(); while(!(isdigit(ch))){ if (ch=='-') p=-1; ch=getchar(); } while((isdigit(ch))){ x=(x<<1)+(x<<3)+ch-'0'; ch=getchar(); } return x*p; } inline int lowbit (int x){ return x&(-x); } inline void add(int x,int v){ while (x<=n){ e[x]+=v; x+=lowbit(x); } } inline int query (int x){ int ans=0; while(x>=1){ ans+=e[x]; x-=lowbit(x); } return ans; } int main(){ t=readin(); int m=t; while (t--){ memset(e,0,sizeof(e)); cout<<"Case "<<m-t<<":"<<endl; n=readin(); for (int i=1;i<=n;i++){ a=readin(); add(i,a); } cin>>ch; while (ch[0]!='E'){ int g,h; g=readin(); h=readin(); if (ch[0]=='A') add(g,h); if(ch[0]=='S') add(g,-h); if (ch[0]=='Q') cout<<query(h)-query(g-1)<<endl; cin>>ch; } } return 0; }
相关文章推荐
- //dfs深搜//WA了五百次//有多组数据注意清空数组或者控制边界//Curling[poj3009]------三M
- matlab 清空数组中的数据
- 数据结构之树状数组
- 数据结构之树状数组
- HDU 4417 超级马里奥 数据结构+利用树状数组进行快速统计+多维统计转换
- POJ 2492 (树状数组统计数据)
- 数据结构之树状数组
- matlab画图笔记-数组转置-截取行列及多组数据显示
- 2015 Multi-University Training Contest 10 (hdu 5406-5416)数据结构+dp+矩阵快速幂+bitset优化拓扑排序+(dp&树状数组)
- 数据结构之树状数组
- 【NOIp复习】数据结构之树状数组
- 数据结构(树状数组)HDU1166
- poj 2299 Ultra-QuickSort(数学:求逆序数||数据结构:树状数组)
- 树状数组学习 ----- 数据结构
- Codeforces Round #248 (Div. 2) B称号 【数据结构:树状数组】
- 数据结构之树状数组
- 清空javascript数组数据
- hdu5057 分块处理,当数值大于数据范围时树状数组 真是巧 将大数据分为小数据来处理
- js数组清空和添加数据
- 信号板拼包:数组方式(bug长度只是截短,并未清空,若之后拷贝数据长度小于之前数据长度,老数据会接在后面)