HDU 4267 A Simple Problem with Integers [树状数组]
2012-09-10 22:00
344 查看
根据%k=a中a和k的不同组合建立55棵树状数组,每次修改操作只对其中1棵树状数组进行操作,每次查询对其中10棵树状数组统计增量和。
#include <string.h> #include <stdio.h> #define MAXN 50005 int n,q,x[MAXN]; int ta,tb,cc,k,op; int c[55][MAXN]; inline void update(int *c,int x,int d){while(x<=n)c[x]+=d,x+=x&-x;} inline int query(int *c,int x){int ret=0;while(x)ret+=c[x],x-=x&-x;return ret;} int main(){ while(scanf("%d",&n)!=EOF){ for(int i=1;i<=n;i++)scanf("%d",&x[i]); for(int i=0;i<55;i++)memset(c[i],0,4*n+4); scanf("%d",&q); while(q--){ scanf("%d",&op); if(op==1){ scanf("%d%d%d%d",&ta,&tb,&k,&cc); update(c[(k*(k-1)>>1)+ta%k],ta,cc); update(c[(k*(k-1)>>1)+ta%k],tb+1,-cc); }else{ scanf("%d",&cc); int ans=0; for(int i=1;i<=10;i++)ans+=query(c[(i*(i-1)>>1)+cc%i],cc); printf("%d\n",x[cc]+ans); } } } return 0; }
相关文章推荐
- HDU 4267 A Simple Problem with Integers【树状数组】
- 【三维树状数组与离散化】HDU 4267——A Simple Problem with Integers
- HDU-4267-A Simple Problem with Integers-(树状数组)
- HDU 4267 A Simple Problem with Integers (树状数组)
- HDU 4267 A Simple Problem with Integers(树状数组)
- hdu 4267 A Simple Problem with Integers(分类别维护多个树状数组)
- HDU 4267 A Simple Problem with Integers(树状数组)
- HDU - 4267 A Simple Problem with Integers(树状数组的逆操作)
- A Simple Problem with Integers 多树状数组分割,区间修改,单点求职。 hdu 4267
- HDU 4267 A Simple Problem with Integers 多个树状数组
- HDU 4267 - A Simple Problem with Integers 树状数组区间修改
- HDU - 4267 A Simple Problem with Integers(树状数组)
- A Simple Problem with Integers+hdu+树状数组
- HDOJ 4267 A Simple Problem with Integers 树状数组
- A Simple Problem with Integers(100棵树状数组)
- POJ 3468 A Simple Problem with Integers 树状数组 区间修改 区间查询
- HDU 4267-A Simple Problem with Integers(多个BIT)
- HDU 4267 A Simple Problem with Integers
- 模板(线段树 + 树状数组 + 区间修改 + 区间查询)eg:POJ 3468 - A Simple Problem with Integers
- POJ 3468 A Simple Problem with Integers(树状数组区间更新)