http://acm.hdu.edu.cn/showproblem.php?pid=4267

【思路】

  • 树状数组的区间修改:在区间[a, b]内更新+x就在a的位置+x. 然后在b+1的位置-x
  • 树状数组的单点查询:求某点a的值就是求数组中1~a的和.

  • (i-a)%k==0把区间分隔开了,不能直接套用树状数组的区间修改单点查询
  • 这道题的K很小,所以可以枚举k,对于每个k,建立k个树状数组,所以一共建立55棵树
  • 所以就可以多建几棵树..然后就可以转换为成段更新了~~

【AC】

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
const int maxn=5e4+;
int tree[][][maxn];
int a[maxn];
int lowbit(int x)
{
return x&(-x);
}
void add(int k,int x,int pos,int val)
{
while(pos<=n)
{
tree[k][x][pos]+=val;
pos+=lowbit(pos);
}
} int query(int k,int x,int pos)
{
int res=;
while(pos)
{
res+=tree[k][x][pos];
pos-=lowbit(pos);
}
return res;
}
int main()
{
while(~scanf("%d",&n))
{
memset(tree,,sizeof(tree));
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
int q;
scanf("%d",&q);
while(q--)
{
int tp;
scanf("%d",&tp);
if(tp==)
{
int x,y,k,c;
scanf("%d%d%d%d",&x,&y,&k,&c);
int st=x/k;
if(x%k) st++;
int ed=st+(y-x)/k;
add(k,x%k,st,c);
add(k,x%k,ed+,-c);
}
else
{
int x;
scanf("%d",&x);
int ans=a[x];
int pos;
for(int i=;i<=;i++)
{
pos=x/i;
if(x%i) pos++;
ans+=query(i,x%i,pos);
}
printf("%d\n",ans);
}
}
}
return ;
}

树状数组

【树状数组区间修改单点查询+分组】HDU 4267 A Simple Problem with Integers的更多相关文章

  1. 【树状数组区间修改单点查询】HDU 4031 Attack

    http://acm.hdu.edu.cn/showproblem.php?pid=4031 [题意] 有一个长为n的长城,进行q次操作,d为防护罩的冷却时间,Attack表示区间a-b的墙将在1秒后 ...

  2. POJ2155 Matrix(二维树状数组||区间修改单点查询)

    Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row an ...

  3. 【poj2155】Matrix(二维树状数组区间更新+单点查询)

    Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...

  4. NBOJv2 1050 Just Go(线段树/树状数组区间更新单点查询)

    Problem 1050: Just Go Time Limits:  3000 MS   Memory Limits:  65536 KB 64-bit interger IO format:  % ...

  5. hdu-1556 Color the ball---树状数组+区间修改单点查询

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1556 题目大意: Problem Description N个气球排成一排,从左到右依次编号为1,2 ...

  6. HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Sub ...

  7. hdu1556 树状数组区间更新单点查询板子

    就是裸的区间更新: 相对于直观的线段树的区间更新,树状数组的区间更新原理不太相同:由于数组中的一个结点控制的是一块区间,当遇到更新[l,r]时,先将所有能控制到 l 的结点给更新了,这样一来就是一下子 ...

  8. hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询

    点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ...

  9. 树状数组区间修改and查询和

    在差分数组上稍加改变,就可以实现这个骚操作 首先我们先来看一看普通的树状数组(基于差分)怎么暴力的求解区间和就是询问区间长度次和 \(\sum^{i=1}_{len}\sum^{j=1}_{i}bas ...

随机推荐

  1. APP启动原理

    当我们点击一个应用的时候,系统会自动创建一个相应的activity类实例,然后执行Oncreate方法,接着会执行以下两行代码,解释如下: super.onCreate(savedInstanceSt ...

  2. Lesson1

    #ifdef __cplusplus #include <cstdlib> #else #include <stdlib.h> #endif #include <SDL/ ...

  3. nginx的web基础

    基于nginx的web部署 [root@nginx ~]# cd /data/web/ client_body_temp/ conf/ fastcgi_temp/ html/ logs/ proxy_ ...

  4. go get 升级所有

    go get -u all go get -u go mod update go get -u full_package_name    go get -u github.com/... // ('. ...

  5. Bootstrap历练实例:表单控件大小

    表单控件大小 您可以分别使用 class .input-lg 和 .col-lg-* 来设置表单的高度和宽度. 实例: <!DOCTYPE html><html><hea ...

  6. vue+element UI如何导出excel表

    导出excel表应按如下规则 首先要先安装如下依赖 npm install --save xlsx npm install --save file-saver 接下在在你的代码中去引用这两个 impo ...

  7. MySQL中日期函数的使用

    1. MySQL中日期函数的使用 1.1. 转DATETIME类型为Date类型 将add_time ::56转化为date类型 select * from product where Date(ad ...

  8. opencast 视频捕获代理 pyCA安装和功能实现

    pyCA安装过程: 36 git clone https://github.com/opencast/pyCA.git 37 cd pyCA/ 41 yum install python-pycurl ...

  9. 如何用纯 CSS 创作一支诱人的冰棍

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/vrxzMw 可交互视频教 ...

  10. python--内置函数, 匿名函数

    一 . 内置函数 什么是内置函数? 就是python给你提供的. 拿来直接⽤的函数, 比如print., input等等. 字符串类型代码的执⾏ eval() 执⾏字符串类型的代码. 并返回最终结果( ...