NYOJ 123士兵杀敌(四)(树状数组)(插线问点)
2013-07-18 20:54
411 查看
和树状数组插点求线刚好相反,插线求点看上去似乎是插点求线的逆操作,插点求线操作是:插点时更新后方+lowbit位置,求线时统计前方-lowbit 的和,插线求点反而是插线时修改前方lowbit位置值,求点时统计后方lowbit的和,插点求线代码见士兵杀敌(二),以下是插线求点的方法:
View Code
#include<cstdio> #include<cstring> const int M=1000010; int data[M]; int Max; inline int LowBit(int n) { return n&(-n); } void Plus(int n,int value) //前n项每项增加value { while(n>0) { data +=value; n-=LowBit(n); } } int Get(int n) //获取每个位置的值 { int sum=0; while(n<=Max) { sum+=data ; n+=LowBit(n); } return sum; } int main() { int n,a,b,v; char s[9]; scanf("%d%d",&n,&Max); while(n--) { scanf("%s",s); if(s[0]=='A') { scanf("%d%d%d",&a,&b,&v); Plus(a-1,-v);//关键 Plus(b,v);//关键 } else { scanf("%d",&a); printf("%d\n",Get(a)); } } return 0; }
View Code
相关文章推荐
- nyoj~123 士兵杀敌(四)(树状数组)
- 树状数组(插线问点)NYOJ123士兵杀敌(四)
- NYOJ 123士兵杀敌(四)【树状数组||区间树】
- nyoj 123 士兵杀敌(四)【树状数组】+【插线问点】
- hdu-1556 Color the ball && nyoj -123 士兵杀敌(四)----------》树状数组
- nyoj 123 士兵杀敌(四)(树状数组)
- nyoj 123 士兵杀敌(四)【树状数组】+【插线问点】
- nyoj123士兵杀敌(四)(树状数组)
- nyoj 123 士兵杀敌(四)(树状数组——插线问点)
- NYOJ_123_士兵杀敌(四)插线问点
- NYOJ 士兵杀敌(三)(线段树,树状数组)
- nyoj 士兵杀敌(一)(树状数组)
- NYOJ-123-士兵杀敌(四)
- nyoj 123 士兵杀敌(四) 插线问点
- nyoj 123 士兵杀敌(四)(树状数组——插线问点)
- NYOJ - 士兵杀敌(二)(树状数组)
- nyoj 士兵杀敌(一)(树状数组)
- NYOJ-116士兵杀敌(二),树状数组~~
- NYOJ 123 士兵杀敌(四)
- NYOJ 123 士兵杀敌(四)