hdu 4267 A Simple Problem with Integers(分类别维护多个树状数组)

原创 2013年12月04日 12:38:42

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.

 

对数组分类,建立多个树状数组,分别保存不同类别修改的不同被别数的数值

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(树状数组)

A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 ...
  • yeguxin
  • yeguxin
  • 2015年08月26日 10:46
  • 596

线段树模版—A Simple Problem with Integers

D - A Simple Problem with Integers Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:...
  • llzhh
  • llzhh
  • 2016年04月29日 00:03
  • 161

POJ 3468 A Simple Problem with Integers (树状数组解法 树状数组区间更新 区间查询)

这道题做过很多遍了,一开始用线段树去搞,然后学了伸展树,又用伸展树去写了一遍,如今发现树状数组也可以写 这里涉及到树状数组的区间更新问题 树状数组能够求的一定是前缀和的形式,区间更新必须转换为端点...
  • Forever_wjs
  • Forever_wjs
  • 2016年07月05日 10:41
  • 344

poj 3468 A Simple Problem with Integers 线段树/树状数组

题目 题目链接:http://poj.org/problem?id=3468 题目来源:《挑战》例题。 简要题意:区间内数全加上某数或者求区间内的和。...
  • xc19952007
  • xc19952007
  • 2016年02月24日 23:44
  • 213

A Simple Problem with Integers+hdu+树状数组

A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 ...
  • u012870383
  • u012870383
  • 2014年12月14日 22:20
  • 407

hdu4267--A Simple Problem with Integers(树状数组)

题目链接:点击打开链接 题目大意:有一个n个数的序列,有两种操作1 a b k c 在区间[a,b]内的i,如果满足(i-a)%k == 0 那么第i个数就加上c, 2 a问第a个数的值是什么,首...
  • u013015642
  • u013015642
  • 2015年08月26日 08:53
  • 1264

HDU - 4267 A Simple Problem with Integers(树状数组)

题目大意:给你N个数,两种操作 1 a b k c: 表示对区间[a,b]内的所有满足(i - a) % k == 0的数加上c 2 a:第a个数是多少解题思路:三维数组,bit[i][k][j]...
  • L123012013048
  • L123012013048
  • 2015年10月20日 15:50
  • 212

hdu 4267 A Simple Problem with Integers 树状数组

题目 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4267 题目来源:2016.2.26群赛 简要题意:询问某数为多少,对[l...
  • xc19952007
  • xc19952007
  • 2016年02月27日 20:13
  • 208

HDU 4267 A Simple Problem with Integers --树状数组

题意:给一个序列,操作1:给区间[a,b]中(i-a)%k==0的位置 i 的值都加上val  操作2:查询 i 位置的值 解法:树状数组记录更新值。 由 (i-a)%k == 0 得知 i%k =...
  • hq572241670
  • hq572241670
  • 2014年11月27日 18:44
  • 410

HDU 4267 A Simple Problem with Integers(树状数组)

A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 ...
  • acm_BaiHuzi
  • acm_BaiHuzi
  • 2015年07月13日 12:31
  • 561
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu 4267 A Simple Problem with Integers(分类别维护多个树状数组)
举报原因:
原因补充:

(最多只允许输入30个字)