题意:有一个序列

"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)

分析转自:http://www.cnblogs.com/Griselda/archive/2012/09/15/2686133.html

感觉是树状数组了

但是 树状数组是单点更新 而题目要求是在a b 内每隔 k 个数更新..

如果用for循环对a b 内每隔 k 个位置的数更新就会很费时间..

所以有一个方法就是 按 k 值 i%k 值还有 i/k+1 值把每隔 k 个位置的值都分组..即按 k 值和 i%k 值建树状数组

到时候维护其中一棵 树状数组就好了..

维护的方法是在c[ k ][a%k][(i-a)/k+1] + 1 在c[ k ][a % k ][ (a/k) + (b-a)/k + 2 ] - 1..

关于建成的树状数组..

更新时有55种情况
1,2,3,4,5......
1,3,5,7,9......
2,4,6,8,10....
1,4,7,10,13...
2,5,9,12,15...
3,6,10,13,16...
.
.
.
10,20,30,40,50...

所以用55个树状数组.

建出来的树并不是普通的1,2,3,4,这样的,而是有着间隔的,其实也就是建造了许多树状数组

 #include<stdio.h>

 #include<queue>
#include<iostream>
#include<algorithm>
#include<string.h>
const int MAXN=; int c[][][MAXN];
int n; int lowbit(int x)
{
return x&(-x);
} void update(int t1,int t2,int i,int val)
{
while(i<=n)
{
c[t1][t2][i]+=val;
i+=lowbit(i);
} }
int sum(int t1,int t2,int i)
{ int s=;
while(i>)
{
s+=c[t1][t2][i];
i-=lowbit(i);
}
return s;
}
int num[MAXN];
int main()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
int m;
while(scanf("%d",&n)!=EOF)
{
for(int i=;i<n;i++)scanf("%d",&num[i]);
for(int i=;i<;i++)
for(int j=;j<;j++)
for(int k=;k<MAXN;k++)
c[i][j][k]=;
scanf("%d",&m);
int a,b,k,q;
int t;
while(m--)
{
scanf("%d",&t);
if(t==)
{
scanf("%d%d%d%d",&a,&b,&k,&q);
a--;
b--;
int num=(b-a)/k;
int s=a%k-;
update(k,s,a/k+,q); //s是该数组的开头数字,a/k+1是结尾的数字
update(k,s,a/k+num+,-q);
}
else
{
scanf("%d",&a);
a--;
int ss=num[a];
for(int i=;i<=;i++)
{
ss+=sum(i,a%i-,a/i+);
}
printf("%d\n",ss);
}
}
}
return ;
}

hdu 4267 多维树状数组的更多相关文章

  1. hdu 2642 二维树状数组 单点更新区间查询 模板水题

    Stars Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others) Total Subm ...

  2. hdu 2642二维树状数组 单点更新区间查询 模板题

    二维树状数组 单点更新区间查询 模板 从零开始借鉴http://www.2cto.com/kf/201307/227488.html #include<stdio.h> #include& ...

  3. HDU 1541.Stars-一维树状数组(详解)

    树状数组,学长很早之前讲过,最近才重视起来,enmmmm... 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据 ...

  4. hdu 5517 Triple(二维树状数组)

    Triple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  5. HDU 5517---Triple(二维树状数组)

    题目链接 Problem Description Given the finite multi-set A of n pairs of integers, an another finite mult ...

  6. 【 HDU - 4456 】Crowd (二维树状数组、cdq分治)

    BUPT2017 wintertraining(15) #5A HDU 4456 题意 给你一个n行n列的格子,一开始每个格子值都是0.有M个操作,p=1为第一种操作,给格子(x,y)增加z.p=2为 ...

  7. HDU 5517 【二维树状数组///三维偏序问题】

    题目链接:[http://acm.split.hdu.edu.cn/showproblem.php?pid=5517] 题意:定义multi_set A<a , d>,B<c , d ...

  8. HDU 5465 Clarke and puzzle Nim游戏+二维树状数组

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5465 Clarke and puzzle  Accepts: 42  Submissions: 26 ...

  9. HDU1559 最大子矩阵 (二维树状数组)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)  ...

随机推荐

  1. Mac 鼠须管 合并词库 简单使用

    之前一直没用过合成词库这功能,有个同步用户数据的选项,点它后,生成一个文件夹,里面就有当前的一些配置,词库之类的 /Users/dfpo/Library/Rime/sync 这样我们就得到了一个装着用 ...

  2. jQuery基础细节

    使用CDN版的jQuery         用托管在公共CDN(Content Delivery Network,内容分发网络)上的jQuery库,CDN是一种内容分发网络,当用户请求其数据时,CDN ...

  3. shell 删除文件下的* (copy).jpg备份文件

    shell编程中,  在for, while循环中为什么不用(), {} 不是没有; 而是因为(), {}做了其他用途: (): 执行命令组, 注意这个命令组是新开一个子shell中执行, 因此,括号 ...

  4. CSS2-3常见的demo列子总结

    CSS2-3常见的demo列子总结 阅读目录 1. css超过一行或者多行后显示省略号. 2. css图片未知高度垂直居中完美解决方案. 3. 学习使用 :before和 :after伪元素 回到顶部 ...

  5. (转)也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)

    原文链接:http://ued.taobao.org/blog/2014/04/full-stack-development-with-nodejs/ 随着不同终端(pad/mobile/pc)的兴起 ...

  6. 微信稳居Android App排行榜4月份国内榜首

    根据某机构通过对Android样本访问行为的持续监测数据进行样本属性加权并根据iOS/Android用户调研数据建模推总得出中国移动互联网用户规模以及相应的用户结构数据显示,2015年4月份国内And ...

  7. java笔记--枚举总结与详解

    由于工作原因,已经有两礼拜没有更新博客了,好不容易完成了工作项目,终于又可以在博客园上愉快的玩耍了. 嗯,今天下午梳理了一下关于java枚举的笔记,比较长,不过还是觉得挺厚实的,哈哈,有出入的地方,欢 ...

  8. Java中Properties类的操作

    知识学而不用,就等于没用,到真正用到的时候还得重新再学.最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用Java来写,外加 ...

  9. [Effective JavaScript 笔记]第35条:使用闭包存储私有数据

    js的对象系统并没有特别鼓励或强制信息隐藏.所有的属性名都是一个字符串,任意一个程序都可以简单地通过访问属性名来获取相应的对象属性.例如,for...in循环.ES5的Object.keys()和Ob ...

  10. SSH 内网端口转发实战

    导读 大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多.不过其实除了这个功能,它的隧道转发功能更是吸引人. 如果两个内网之间的linux服务器需要互相登录,或需要互相访问内网某个端口,担忧 ...