HDU 4267 A Simple Problem with Integers【树状数组】
2012-09-10 21:26
369 查看
题意: 知道了连续的 n 个数的 值,有两种操作:
1 a b k c: adding c to each of Ai which satisfies a <= i <= b and (i - a) % k == 0
2 a : means querying the value of a
分析:因为k比价小,可以多个树状数组,根据 i%k的不同建立k 个树状数组,每次修改操作对其中 1 棵树状数组进行操作
每次查询对其中10个树状数组统计结果累加。
1 a b k c: adding c to each of Ai which satisfies a <= i <= b and (i - a) % k == 0
2 a : means querying the value of a
分析:因为k比价小,可以多个树状数组,根据 i%k的不同建立k 个树状数组,每次修改操作对其中 1 棵树状数组进行操作
每次查询对其中10个树状数组统计结果累加。
#include<stdio.h> #include<string.h> #define clr(x)memset(x,0,sizeof(x)) int t[12][12][50005]; int n; int lowbit(int x) { return (x)&(-x); } void add(int i,int j,int pos,int w) { while(pos<=n) { t[i][j][pos]+=w; pos+=lowbit(pos); } } int getsum(int i,int j,int pos) { int s=0; while(pos>0) { s+=t[i][j][pos]; pos-=lowbit(pos); } return s; } int v[50005]; int main() { int m,i; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%d",&v[i]); clr(t); int a,b,k,q; scanf("%d",&m); int op; while(m--) { scanf("%d",&op); if(op==1) { scanf("%d%d%d%d",&a,&b,&k,&q); a--; b--; int nu=(b-a)/k; int s=a%k; add(k,s,a/k+1,q); add(k,s,a/k+nu+2,-q); } else { scanf("%d",&a); a--; int tt=v[a]; for(i=1;i<=10;i++) tt+=getsum(i,a%i,a/i+1); printf("%d\n",tt); } } } 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(树状数组区间更新)