HDU4267 树状数组
题意描述:
给定一个数组,有两种操作:
操作一: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 树状数组的更多相关文章
- HDU4267 树状数组 不连续区间修改(三维)
A Simple Problem with Integers Problem Description Let A1, A2, ... ...
- A Simple Problem with Integers(树状数组HDU4267)
A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- bzoj1878--离线+树状数组
这题在线做很麻烦,所以我们选择离线. 首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置. 然后对与每种颜色第一次出现的位置x,将a[x]++. 将每个询问按左端点排序,再从左往右扫, ...
- codeforces 597C C. Subsequences(dp+树状数组)
题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1399 Solved: 694[Submit][Status] ...
- BZOJ 3289: Mato的文件管理[莫队算法 树状数组]
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 2399 Solved: 988[Submit][Status][Di ...
- 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组
E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
随机推荐
- c++并发编程之线程的互斥与同步
什么是线程的同步与互斥? 互斥:指在某一时刻指允许一个进程运行其中的程序片,具有排他性和唯一性. 对于线程A和线程B来讲,在同一时刻,只允许一个线程对临界资源进行操作,即当A进入临界区对资源操作时,B ...
- Linux上查看文件大小的用法(转载)
具体用法可以参考:https://blog.csdn.net/linfanhehe/article/details/78560887 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常 ...
- Spring MVC测试框架
原文链接:http://jinnianshilongnian.iteye.com/blog/2004660 Spring MVC测试框架详解——服务端测试 博客分类: springmvc杂谈 spri ...
- linux查看硬盘详细信息
最近公司新进了一批设备,为了弄清楚厂家有没有忽悠我们,分配给我一个任务 查看磁盘是不是二手的,window上有鲁大师啥的那么linux有什么软件吗? 答案是有的! 叫做smart 具体请查看: htt ...
- Hadoop生态圈-Kafka的完全分布式部署
Hadoop生态圈-Kafka的完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要内容就是搭建Kafka完全分布式,它是在kafka本地模式(https:/ ...
- Spark记录-Spark作业调试
在本地IDE里直接运行spark程序操作远程集群 一般运行spark作业的方式有两种: 本机调试,通过设置master为local模式运行spark作业,这种方式一般用于调试,不用连接远程集群. 集群 ...
- SpringMVC关于ajax提交400错误(后台获取为null)
400错误有三种情况 1:请求的数据量过大,不过这种情况一般很少见. 2:请求的data参数有误,确保每一个参数都能请求到. 注释:之前小白出现400错误,后台获取参数为null是因为第三种情况,经过 ...
- 关于Html class id 命名规范
CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:l ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- 流媒体技术学习笔记之(十三)Windows安装FFmpeg
一.下载地址: 网址:https://ffmpeg.org/ 选择Windows版本:https://ffmpeg.org/download.html#build-windows 二.解压安装: 下载 ...