题意描述:

给定一个数组,有两种操作:

操作一:a b k c 对于区间a~b之间的元素如果下标满足(i-a)%k=0则给元素i加上c

操作二:a          查询下标为a的元素当前值

解题思路:

1、首先这个涉及到区间修改点查询,所以应该想到使用树状数组或线段树

2、修改的区间是不连续的,为了使不连续可以转换为连续的,我们对每种情况进行枚举,有55种情况

即对k=1   有0

k=2   有0 、1

k=3    有0、1、2

···

k=10   有0、1、2、3、4、5、6、7、8、9

所以我们可以声明一个三维数组c[k][i][j]:其中k%i=j的元素,表示k属于i,j这个树状数组

对于操作一:我们只需更改a[MAXN][k][a%k]这个树状数组内的连续区间,即

update(a,c);

update(b+1,-c);

对于a、b之间的不满足a%k的元素虽然我们也更新了,但是我们在查询的时候不会在a[MAXN][k][a%k]这个树状数组中查询,所以这个也就没有关系了

对于操作二:我们只需要查询a[a][i][a%i]即可,其中i从1到10,累加起来就可以了。最后加上d[a](位置a的初始值)

#include<bits/stdc++.h>
using namespace std; #define N 50010
#define fo(i,n) for(int i=0;i<(n);i++)
int c[N][][];
int s[N];
int n;
int lowbit(int i)
{
return i&(-i);
} void update(int pos,int k,int mod,int v)
{
for(int i=pos;i<=n;i+=lowbit(i))
c[i][k][mod]+=v; } int sum(int pos,int a)
{
int ans=;
for(int i=pos;i>;i-=lowbit(i))
for(int j=;j<=;j++)
ans+=c[i][j][a%j];
return ans;
} int main()
{
while(scanf("%d",&n)==)
{
for(int i=;i<=n;i++)scanf("%d",&s[i]);
memset(c,,sizeof c);
int m;cin>>m;
while(m--)
{
int op,a,b,k,add;
scanf("%d",&op);
if(op==)
{
scanf("%d%d%d%d",&a,&b,&k,&add);
update(a,k,a%k,add);
update(b+,k,a%k,-add); }
else
{
scanf("%d",&a);
printf("%d\n",sum(a,a)+s[a]); } } } }

HDU4267 树状数组的更多相关文章

  1. HDU4267 树状数组 不连续区间修改(三维)

    A Simple Problem with Integers                                  Problem Description Let A1, A2, ... ...

  2. A Simple Problem with Integers(树状数组HDU4267)

    A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (J ...

  3. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  4. bzoj1878--离线+树状数组

    这题在线做很麻烦,所以我们选择离线. 首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置. 然后对与每种颜色第一次出现的位置x,将a[x]++. 将每个询问按左端点排序,再从左往右扫, ...

  5. codeforces 597C C. Subsequences(dp+树状数组)

    题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...

  6. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  7. BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1399  Solved: 694[Submit][Status] ...

  8. BZOJ 3289: Mato的文件管理[莫队算法 树状数组]

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 2399  Solved: 988[Submit][Status][Di ...

  9. 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组

    E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

随机推荐

  1. IOI2018题解

    只有部分题解 练习赛 T2 自然还是要简单考虑了 0~n-1的排列,考虑相对的大小 我们先考虑对于前三个:a,b,c 询问a,b,询问b,c,再询问a,b,c 发现,如果三个知道两个,那么第三个可以唯 ...

  2. Qtree4——动态点分治

    题目描述 给出一棵边带权的节点数量为n的树,初始树上所有节点都是白色.有两种操作: C x,改变节点x的颜色,即白变黑,黑变白 A,询问树中最远的两个白色节点的距离,这两个白色节点可以重合(此时距离为 ...

  3. C/C++如何整行读入字符串?

    在写代码的过程中,经常要一行一行的读入字符串进行处理,这里我总结了一些方法,供大家参考. 方法一:scanf()读入char[] 使用方法: ]; scanf("%[^\n]",& ...

  4. NodeJS 笔记 URL模块

    url模块 ,包含分析和解析 URL 的工具. var url = require('url'); url.parse(urlStr[, parseQueryString][, slashesDeno ...

  5. Hadoop生态圈-使用Kafka命令在Zookeeper中对应关系

    Hadoop生态圈-使用Kafka命令在Zookeeper中对应关系 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.zookeeper保存kafka的目录     二.使用Ka ...

  6. DNA序列编码中Hairpin的定义和计算

    DNA序列编码中Hairpin的定义和计算 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 [1] 张凯. DNA计算核酸编码优化及算法设计[D]. 2008. [2] Shin, ...

  7. ngx_lua_API 指令详解(二)ngx.re.match/find/gmatch/sub/gsub指令集合

    1.先来个官方的ngx.re.match location /ngx_re_match { default_type text/html; content_by_lua_block { local m ...

  8. ASP.NET中异常处理的注意事项

    一.ASP.NET中需要引发异常的四类情况 1.如果运行代码后,造成内存泄漏.资源不可用或应用程序状态不可恢复,则引发异常.Console这个类中,有很多类似这样的代码: if ((value < ...

  9. 新建 Spring Mvc Web + Maven 的 maven 错误 (二)

    新建项目后,可能由于哪边配置不正确,或也可能是编码问题,就有可能在创建初始就可能发生错误: 这是 pom.xml 中提示的错误,有的人说要删除 maven 的本地仓库位置:c:\用户[Users]\A ...

  10. shell 判断路径

    判断路径 ];then echo "找到了123" if [ -d /root/Desktop/text ] then echo "找到了text" else ...