cogs 1316. 数列操作B 区间修改 单点查询
1316. 数列操作B
★★ 输入文件:shulieb.in 输出文件:shulieb.out 简单对比
时间限制:1 s 内存限制:128 MB
【问题描述】
假设有一个大小为 n(n≤100000) 整数数列 A,支持如下两种操作:
1. 将 Ai,Ai+1,…,Aj 的值均增加 d
2. 查询 Ai 的值
根据操作要求进行正确操作并输出结果。
【输入格式】
输入文件第一行一个整数 n,
第二行为 n 个整数,表示数列 A 中各项的初始值。
第三行为一个整数 m ,表示操作数。下接 m 行,每行描述一个操作,有如下两种情况:
ADD i j d(将 Ai,Ai+1,…,Aj(1≤i,j≤n) 的值均增加一个整数 d)
QUERY s(表示查询 As 的值)
【输出格式】
对于每一个询问,输出查询到的结果。
【样例输入】
4
1 4 2 3
3
QUERY 1
ADD 2 2 50
QUERY 2
【样例输出】
1
54 做法一:用树状数组存储差分数组
代码如下
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#define maxn 100005
using namespace std;
int n,m;
int a[maxn],sum[maxn];
int lowbit(int x){ return x&(-x); }
#define ll long long
void Add(int x,int d){//存的是差分数组
while(x<=n){sum[x]+=d;x+=lowbit(x); }
}
long long Sum(int x){
long long ret=;
while(x>){ ret+=sum[x];x-=lowbit(x);}
return ret;
}
int main()
{
freopen("shulieb.in","r",stdin);freopen("shulieb.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=;i<=m;i++){
string s;cin>>s;
if(s[]=='Q'){
int x;scanf("%d",&x);
printf("%lld\n",Sum(x)+a[x]);
}
else{
int l,r,x;scanf("%d%d%d",&l,&r,&x);
Add(l,x);Add(r+,-x);
} } return ;
}
2.线段树打标记!
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
#define ll long long
int a[maxn];
int n,m;
struct SegmentTree{
int l,r;
long long dat;
int lazy_tag;
}t[maxn<<];
void Pushdown(int p,int l,int r,int mid){
t[p*].dat+=t[p].lazy_tag*(mid-l+);
t[p*+].dat+=t[p].lazy_tag*(r-mid);
t[p*].lazy_tag+=t[p].lazy_tag;
t[p*+].lazy_tag+=t[p].lazy_tag;
t[p].lazy_tag=;
}
void build(int p,int l,int r){
t[p].l=l;t[p].r=r;
if(l==r){
t[p].dat=a[l];
return;
}
int mid=(l+r)>>;
build(p*,l,mid);
build(p*+,mid+,r);
t[p].dat=t[p*].dat+t[p*+].dat;
}
ll Get(int p,int l,int r,int pos){
if(l==r) return t[p].dat;
int mid=(l+r)>>;
Pushdown(p,l,r,mid);
if(pos<=mid) return Get(p*,l,mid,pos);
else return Get(p*+,mid+,r,pos);
}
void Add(int p,int l,int r,int s,int tt,ll x){
if(s>r||tt<l) return;
if(s<=l&&r<=tt){
t[p].dat+=x*(r-l+);
t[p].lazy_tag+=x;
return;
}
int mid=(l+r)>>;
Pushdown(p,l,r,mid);
Add(p*,l,mid,s,tt,x);Add(p*+,mid+,r,s,tt,x);
t[p].dat=t[p*].dat+t[p*+].dat;
}
int main()
{
freopen("shulieb.in","r",stdin);freopen("shulieb.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=;i<=m;i++){
string s;cin>>s;
if(s[]=='Q'){
int x;scanf("%d",&x);
printf("%lld\n",Get(,,n,x)+a[x]);
}
else{
int s,t,d;scanf("%d%d%d",&s,&t,&d);
Add(,,n,s,t,d);
}
} return ;
}
cogs 1316. 数列操作B 区间修改 单点查询的更多相关文章
- cogs 1317. 数列操作C 区间修改 区间查询
1317. 数列操作C ★★★ 输入文件:shuliec.in 输出文件:shuliec.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述] 假设有一个长度为 n( ...
- HDU 1556 BIT区间修改+单点查询(fread读入优化)
BIT区间修改+单点查询 [题目链接]BIT区间修改+单点查询 &题解: BIT区间修改+单点查询和求和的bit是一模一样的(包括add,sum) 只不过是你使用函数的方式不一样: 使用区间的 ...
- 【树状数组区间修改单点查询+分组】HDU 4267 A Simple Problem with Integers
http://acm.hdu.edu.cn/showproblem.php?pid=4267 [思路] 树状数组的区间修改:在区间[a, b]内更新+x就在a的位置+x. 然后在b+1的位置-x 树状 ...
- BZOJ4999:This Problem Is Too Simple!(DFS序&树上差分&线段树动态开点:区间修改单点查询)
Description 给您一颗树,每个节点有个初始值. 现在支持以下两种操作: 1. C i x(0<=x<2^31) 表示将i节点的值改为x. 2. Q i j x(0<=x&l ...
- hdu-1556 Color the ball---树状数组+区间修改单点查询
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1556 题目大意: Problem Description N个气球排成一排,从左到右依次编号为1,2 ...
- D - Mayor's posters POJ - 2528 离散化+线段树 区间修改单点查询
题意 贴海报 最后可以看到多少海报 思路 :离散化大区间 其中[1,4] [5,6]不能离散化成[1,2] [2,3]因为这样破坏了他们的非相邻关系 每次离散化区间 [x,y]时 把y+1点也加入 ...
- 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 ...
- 【树状数组区间修改单点查询】HDU 4031 Attack
http://acm.hdu.edu.cn/showproblem.php?pid=4031 [题意] 有一个长为n的长城,进行q次操作,d为防护罩的冷却时间,Attack表示区间a-b的墙将在1秒后 ...
- HDU 5861 Road(线段树 区间修改 单点查询)
Road Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
随机推荐
- 插播一条 WMI修复教程
一般情况下,WMI都会好好的工作,但偶尔也会出现小问题. 这些小问题会影响到正在使用WMI的程序,比如设置的有线和无线网络依然还是依赖WMI的.如果WMI自己都没办法工作,有些数据就获取不到了. 先看 ...
- Intellij IDEA 如何使用Jrebel热部署
My Jrebel 已经不再提供免费使用了,或使用破解版Jrebel 或可以移步至 HotSwapAgent,或使用破解的Jrebel. 一个java web项目,在写的过程中我们需要不断调试,如果没 ...
- Spring Security 5.x兼容多种密码加密方式
1 spring security PasswordEncoder spring security 5不需要配置密码的加密方式,而是用户密码加前缀的方式表明加密方式,如: {MD5}88e2d8cd1 ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(4)之业务仓储工厂
在创建业务层之前,我们先来熟悉一下业务仓储工厂Bobo.Repository.dll程序集,后续的业务操作,我们都将通过这个程序集中的方法传递数据库操作,其介于数据库操作与业务层之间,详情可前往< ...
- Linux 内核总线注册
如同我们提过的, 例子源码包含一个虚拟总线实现称为 lddbus. 这个总线建立它的 bus_type 结构, 如下: struct bus_type ldd_bus_type = { .name = ...
- nodejs + webpack4 + babel6 结合写Chrome浏览器插件记录(2)
上来先来看下当前实现的效果吧. 前言 首先感谢第一篇留言鼓励的同学,最近各种繁杂的事,时间占用较多,但是也总抽空继续改造这个项目,期间遇到了各种Vue渲染的问题,常规的字符串渲染会在Chrome插件中 ...
- TextInputLayout低版本bug :“android.view.InflateException: Binary XML file line #6 : Error inflating class Textview”
开发中用到TextInputLayout配合TextInputEdittext做输入框,在android7.0 android8.0手机上运行正常,在异步android5.0.2的手机上,点击输入框就 ...
- JMeter Web测试计划
在本节中,将学习如何创建测试网页的基本测试计划. 出于演示测试目的,我们将测试URL - https://www.yiibai.com/ 的网页性能. 创建JMeter测试计划 进入到JMeter安装 ...
- 25.python之面向对象
一 三大编程范式 正本清源一:有人说,函数式编程就是用函数编程--->傻逼 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的python语法后,大家就可以写python代码了,然后每个 ...
- 基于 HTML5 + WebGL 的无人机 3D 可视化系统
前言 近年来,无人机的发展越发迅速,既可民用于航拍,又可军用于侦察,涉及行业广泛,也被称为“会飞的照相机”.但作为军事使用,无人机的各项性能要求更加严格.重要.本系统则是通过 Hightopo 的 ...