题意描述:

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

操作一: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. BZOJ 3195 [Jxoi2012]奇怪的道路 | 状压DP

    传送门 BZOJ 3195 题解 这是一道画风正常的状压DP题. 可以想到,\(dp[i][j][k]\)表示到第\(i\)个点.已经连了\(j\)条边,当前\([i - K, i]\)区间内的点的度 ...

  2. HGOI20190126 模拟赛

    /* 最后一题比较难! */ solution:观察这个奇怪的图,不能共用走廊,就是1.2打包,3,4打包,每个包之间连线的线段覆盖问题. 考虑吧每个数映射成一个约为一半的数,且相邻(前奇后偶映射值一 ...

  3. BZOJ3738 [Ontak2013]Kapitał 【扩展Lucas】

    题目链接 BZOJ3738 题解 复习 同上 但是为了消去因子\(10\),处理\(2^k\)的时候,乘回\(2^{k_1}\)时,应同时计算\(5^{k_2}\) 如果\(k_1 \ge k_2\) ...

  4. solr的基本使用

    Solr 概念: 1. 搜索引擎的技术,建立在Lucene之上,可以解决跨平台,跨语言的问题.(Lucene本身是个jar包,也就是API,不能独立运行,需要程序的调用来完成全局检索,不具备跨平台,跨 ...

  5. 【洛谷P1471】方差

    题目大意:维护一个有 N 个元素的序列,支持以下操作:区间加,区间询问均值,区间询问方差. 题解:可知区间均值和区间和有关,即:维护区间和就等于维护了区间均值.区间方差表达式为 \(\frac{\Si ...

  6. MFC:ID命名和数字约定

    今天早上双击一个刚刚编译完成的应用程序,界面刚刚显示,又自动触发了一个菜单事件,打开了一个网页.真的很意外.关闭窗口,再次双击,又自动打开了一个网页,再关闭,再双击,又不自动打开网页了.这是什么情况? ...

  7. SQL Server 查询性能优化——覆盖索引

    覆盖索引又可以称为索引覆盖. 解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖. 解释二: 索引是高效找到行的一个方法,当能通过检索索引 ...

  8. 在CentOS上导出JVM内存信息

    首先看下Tomcat的进程Id: [root@iZ25Z ~]# ps aux | grep java www 2111 4.0 23.5 1637648 452756 ? Sl 10:12 4:35 ...

  9. [iOS]深拷贝/浅拷贝区别

    来点鸡汤: // 所谓拷贝 就是在原有的对象的基础上产生一个新的副本对象.有两点原则: //   1. 改变原对象的属性和行为不会影响副本对象 //   2. 改变副本对象的属性和行为不会影响原对象 ...

  10. Java SSM框架之MyBatis3(七)MyBatis之参数取值

    在mybatis中,参数取值方式有两种:#{ } 和 ${ } 一.#{ } select * from student where name=#{name} 编译后执行的sql语句: select ...