hdu 4267 A Simple Problem with Integers
2014-10-02 22:58
435 查看
题目链接:hdu 4267 A Simple Problem with Integers
类似于题目:hdu 1556 Color the ball 的技巧实现树状数组的段更新点查询。
由于该题对于段的更新并不是连续的,从而可以构造多个树状数组。因为$k \in [1,10] $,从而可以把更新划分为如下类型:
1,2,3,4,5...
-------------
1,3,5,7,9...
2,4,6,8,10...
-------------
1,4,7,10,13...
2,5,8,11,14...
3,6,9,12,15...
-------------
...
一共55棵树状数组。对于每一种更新,相应的更新该类型对应的树状数组。
在查询时,同样寻找符合该查询类型的树状数组并最终加上初始值即可完成。
代码如下:
类似于题目:hdu 1556 Color the ball 的技巧实现树状数组的段更新点查询。
由于该题对于段的更新并不是连续的,从而可以构造多个树状数组。因为$k \in [1,10] $,从而可以把更新划分为如下类型:
1,2,3,4,5...
-------------
1,3,5,7,9...
2,4,6,8,10...
-------------
1,4,7,10,13...
2,5,8,11,14...
3,6,9,12,15...
-------------
...
一共55棵树状数组。对于每一种更新,相应的更新该类型对应的树状数组。
在查询时,同样寻找符合该查询类型的树状数组并最终加上初始值即可完成。
代码如下:
#include <cstdlib> #include <cstdio> #include <cstring> #include <iostream> #define MAXN 50005 using namespace std; int bit[12][12][MAXN]; int arr[MAXN]; int N; int lowbit(int x) { return x&(-x); } int query(int a, int b, int l) { int sum = 0; while( l > 0 ) { sum += bit[a][b][l]; l -= lowbit(l); } return sum; } void add(int a, int b, int l, int x) { while( l <= N ) { bit[a][b][l] += x; l += lowbit(l); } } int main(int argc, char *argv[]) { while(scanf("%d", &N)!= EOF) { memset(bit, 0, sizeof(bit)); for( int i = 1 ; i <= N ; i++ ) { scanf("%d", &arr[i]); } int Q; scanf("%d", &Q); for( int i = 0 ; i < Q ; i++ ) { int ty; scanf("%d", &ty); if( ty == 1 ) { int a, b, k, c; scanf("%d%d%d%d", &a, &b, &k, &c); add(k, a%k, a, c); add(k, a%k, b+1, -c); } if( ty == 2 ) { int l; scanf("%d", &l); int ans = arr[l]; for( int i = 1 ; i <= 10 ; i++ ) { ans += query(i, l%i, l); } printf ( "%d\n", 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(12年长春网络赛-A题-线段树)
- HDU 4267 A Simple Problem with Integers(线段树)#by zh
- 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 Regional Changchun Online
- HDU 4267 A Simple Problem with Integers [树状数组]
- ChangChun_1001 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(树状数组)
- 【三维树状数组与离散化】HDU 4267——A Simple Problem with Integers