一维树桩数组区间更新、区间查询
链接:https://www.nowcoder.com/acm/contest/135/I
来源:牛客网
区间 (interval)
时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
Apojacsleam喜欢数组。
他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次操作:
操作一:将a[L]-a[R]内的元素都加上P
操作二:将a[L]-a[R]内的元素都减去P
最后询问a[l]-a[r]内的元素之和?
请认真看题干及输入描述。
输入描述:
输入共M+3行:第一行两个数,n,M,意义如“题目描述”第二行n个数,描述数组。第3-M+2行,共M行,每行四个数,q,L,R,P,若q为1则表示执行操作2,否则为执行操作1第4行,两个正整数l,r
输出描述:
一个正整数,为a[l]-a[r]内的元素之和
示例1
输入
复制
10 5 1 2 3 4 5 6 7 8 9 10 1 1 5 5 1 2 3 6 0 2 5 5 0 2 5 8 1 4 9 6 2 7
输出
复制
23
说明
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<set>
const int MAXN=1e6+10;
using namespace std;
int lowbit(int x){return x&(-x);}
int n,Q,opt,x,y;
long long A[MAXN],C[MAXN],sum[MAXN],z;
void modifyA(int x,int val){while(x<=n){A[x]+=val;x+=lowbit(x);}
}
void modifyC(int x,long long val){while(x<=n){C[x]+=val;x+=lowbit(x);}
}
void update(int from,int to,long long val){modifyA(from,val);modifyA(to+1,-val);modifyC(from,val*from);modifyC(to+1,-val*(to+1));
}
long long queryA(int loc){long long ans=0;while(loc){ans+=A[loc];loc-=lowbit(loc);}return ans;
}
long long queryC(int loc){long long ans=0;while(loc){ans+=C[loc];loc-=lowbit(loc);}return ans;
}
long long query(int loc){return sum[loc]+(loc+1)*queryA(loc)-queryC(loc);
}
long long query(int from,int to)
{return query(to)-query(from-1);
}
int m;
int main()
{scanf("%d%d",&n,&m);for(register int i=1;i<=n;i++)scanf("%lld",&sum[i]),sum[i]+=sum[i-1];while(m--){scanf("%d%d%d",&opt,&x,&y);if(opt==1){scanf("%lld",&z);update(x,y,-z);}else{scanf("%lld",&z);update(x,y,z);}}int L,R;scanf("%d%d",&L,&R);printf("%lld\n",query(L,R));return 0;
}
一维树桩数组区间更新、区间查询相关推荐
- UESTC 1601 艾尔大停电2 二维树状数组+区间更新
艾尔大停电2 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询
点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ...
- hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- poj3468 线段树区间更新+区间查询
题目链接: http://poj.org/problem?id=3468 A Simple Problem with Integers Time Limit: 5000MS Memory Limi ...
- 石油大 2019年第二阶段我要变强个人训练赛第十八场 Problem N 扶桑号战列舰(线段树+区间更新+区间查询)
链接:http://icpc.upc.edu.cn/problem.php?cid=1803&pid=13 题意:给出一个n,接下来一行给出n个数.才开始所有数为0,每次操作可以选一个区间[l ...
- HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Sub ...
- Color the ball(树状数组区间更新+单点求值)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 Color the ball Time Limit: 9000/3000 MS (Java/Ot ...
- hdu2642二维树状数组单点更新+区间查询
http://acm.hdu.edu.cn/showproblem.php?pid=2642 题目大意:一个星空,二维的.上面有1000*1000的格点,每个格点上有星星在闪烁.一开始时星星全部暗淡着 ...
- hdu 4533(树状数组区间更新+单点查询)
题意:给你N个矩形,每个矩形给出左下角坐标,右上角坐标,有M个询问,每个询问给出一个时间t,问(0,0),(t,t)的范围内矩形的面积和(重叠的也算). 参考博客:http://blog.csdn.n ...
最新文章
- 直系同源基因ks_哈佛医学院开发出新的Cas9变体,可以靶向基因组绝大部分序列...
- 检测你的机子上装了什么版本的.net framework
- RDMA技术详解(三):理解RDMA Scatter Gather List
- loadrunner 分用户日志
- 公共链接url出错_SEO优化技巧:关于URL的优化方法
- VSTS有Bug,分析数据库的维度和维度属性使用中文命名时候,作为报表参数会出错。虽然有解决办法但是头大。...
- android eclipse三合一,创新巅峰之作全能型Orbitrap Eclipse三合一质谱仪
- 紫光扫描仪ocr_清华紫光扫描仪的安装教程及使用方法
- C++11 packaged_task
- tomcat自动化部署(拉取\备份、部署、更新、回滚)
- php 会议室源码,PHP和jQuery实现会议排座管理.doc
- 测试点 - 发朋友圈
- cocos2d-x精灵的放大和缩小
- 【通識:人生哲學與幸福】青年心理學 Part2 成熟
- 【Go资料】go语言学习资料书籍
- easyExcel导入失败提示用户第几行有误并回滚数据
- 超级好用的在线流程图、脑图、UML制作工具ProcessOn
- 微软确认裁员1万人,遣散费约54亿元,人均获赔54万!
- 2021-08-11校网比赛B题
- 工控软件项目和文档整理
热门文章
- 16kb等于多少b_面试官:MySQL索引为何选择B+树?
- python装饰器详解-这是我见过最全面的Python装饰器详解!没有学不会这种说法!...
- python简单爬虫代码-python爬虫超简单攻略,带你写入门级的爬虫,抓取上万条信息...
- python主要用来做什么-Python能用来做什么?以下是Python的三大主要用途
- 自学python能学成吗-自学Python能学会吗 零基础怎么学
- 用python画玫瑰花-用python画一朵玫瑰花
- 精通python工资高吗-软件测试,如何工资过万?
- 连续语音识别,continuous speech recognition,音标,读音,翻译,英文例句,英语词典
- php7.1 mysql_安装最新LAMP环境 (CentOS7+PHP7.1.5+Mysql5.7)
- DOM判断节点类型分分钟搞定