hdu 4267 A Simple Problem with Integers(分类别维护多个树状数组)
2013-12-04 12:38
423 查看
Let A1, A2, ... , AN be N elements. Youneed to deal with two kinds of operations. One type of operation is to add agiven number to a few numbers in a given interval. The other is to query thevalue of some element.
Input
There are a lot of test cases.
The first line contains an integer N. (1 <= N <= 50000)
The second line contains N numbers which are the initial values of A1, A2, ..., AN. (-10,000,000 <= the initial value of Ai <= 10,000,000)
The third line contains an integer Q. (1 <= Q <= 50000)
Each of the following Q lines represents an operation.
"1 a b k c" means adding c to each of Ai which satisfies a <= i<= b and (i - a) % k == 0. (1 <= a <= b <= N, 1 <= k <= 10,-1,000 <= c <= 1,000)
"2 a" means querying the value of Aa. (1 <= a <= N)
Output
For each test case, output several lines toanswer all query operations.
对数组分类,建立多个树状数组,分别保存不同类别修改的不同被别数的数值
Input
There are a lot of test cases.
The first line contains an integer N. (1 <= N <= 50000)
The second line contains N numbers which are the initial values of A1, A2, ..., AN. (-10,000,000 <= the initial value of Ai <= 10,000,000)
The third line contains an integer Q. (1 <= Q <= 50000)
Each of the following Q lines represents an operation.
"1 a b k c" means adding c to each of Ai which satisfies a <= i<= b and (i - a) % k == 0. (1 <= a <= b <= N, 1 <= k <= 10,-1,000 <= c <= 1,000)
"2 a" means querying the value of Aa. (1 <= a <= N)
Output
For each test case, output several lines toanswer all query operations.
对数组分类,建立多个树状数组,分别保存不同类别修改的不同被别数的数值
const int MAXN = 1000000; int s[11][11][50005]; int a[50005]; int n; int lowbit(int x) { return x & (-x); } int add(int a, int b, int i, int v) { while (i <= n) { s[a][b][i] += v; i += lowbit(i); } } int sum(int a, int b, int i) { int ret = 0; while (i > 0) { ret += s[a][b][i]; i -= lowbit(i); } return ret; } int main () { int T; int op, aa, bb, v, k; while (RI(n) != EOF) { FE(i, 1, n) RI(a[i]); CLR(s, 0); int m; RI(m); while (m--) { RI(op); if (op == 1) { RIV(aa, bb, k, v); add(k, aa % k, aa, v); add(k, aa % k, (bb + 1),-v); } else { RI(aa); int ans = a[aa]; FE(i, 1, 10) ans += sum(i, aa %i, aa); cout << ans <<endl; } } } 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【树状数组】
- 【三维树状数组与离散化】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 线段树维护不连续点
- HDOJ 4267 A Simple Problem with Integers 树状数组
- A Simple Problem with Integers+hdu+树状数组
- HDU 4267 A Simple Problem with Integers (55棵线段树更新维护)
- POJ3468_A Simple Problem with Integers_树状数组区间和::区间修改
- HDU 4267 A Simple Problem with Integers(线段树)
- 【树状数组】 HDOJ 4276 A Simple Problem with Integers
- HDU 4267 A Simple Problem with Integers