2022春每日一题:Day 26
题目:无聊的数列
区间增加等差序列,似乎不好维护,等差等差,那就差分呗,单点查询,更加肯定,直接差分,每次加了一个等差序列容易发现只需要对应的差分数组a[l]+=k,a[l+1]...a[r]+=d,a[r+1]-=(r-l)*d+k
查询输出a[1]+a[2]...a[p],然后用线段树维护一下,这个题就做完了。(敲得也是十分顺利,写完直接过编译还输出了正确答案)(不开longlong见祖宗)
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define ls(x) x<<1
#define rs(x) x<<1|1
const int N=1e5+5;
using namespace std;
int n,m,a[N];
namespace segment
{
struct smt
{
int l,r;
long long sum,tag;
smt(int ll,int rr,long long ss,long long tt)
{
l=ll;r=rr;sum=ss;tag=tt;
}
smt(){
}
}e[N<<2];
void update(int x)
{
e[x].sum=e[ls(x)].sum+e[rs(x)].sum;
}
void pushup(int x,int v)
{
e[x].sum+=(e[x].r-e[x].l+1)*v;
e[x].tag+=v;
}
void down(int x)
{
if(e[x].tag!=0)
{
pushup(ls(x),e[x].tag);
pushup(rs(x),e[x].tag);
e[x].tag=0;
}
}
void build(int x,int l,int r)
{
e[x].l=l,e[x].r=r;
if(l==r)
{
e[x].sum=a[r]-a[r-1];
e[x].tag=0;
return ;
}
int mid=(l+r)>>1;
build(ls(x),l,mid);
build(rs(x),mid+1,r);
update(x);
}
void modify(int x,int l,int r,int v)
{
if(l<=e[x].l && e[x].r<=r)
{
e[x].sum+=(e[x].r-e[x].l+1)*v;
e[x].tag+=v;
return ;
}
down(x);
int mid=(e[x].l+e[x].r)>>1;
if(l<=mid)
modify(ls(x),l,r,v);
if(r>mid)
modify(rs(x),l,r,v);
update(x);
}
long long query(int x,int l,int r)
{
if(l<=e[x].l && e[x].r<=r)
return e[x].sum;
down(x);
int mid=(e[x].l+e[x].r)>>1;
long long ret=0;
if(l<=mid)
ret+=query(ls(x),l,r);
if(r>mid)
ret+=query(rs(x),l,r);
return ret;
}
}
using namespace segment;
int main()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
build(1,1,n);
while(m--)
{
int opt,l,r,d,k;
scanf("%d",&opt);
if(opt==1)
{
scanf("%d %d %d %d",&l,&r,&k,&d);
modify(1,l,l,k);
if(l<r)
modify(1,l+1,r,d);
if(r<n)
modify(1,r+1,r+1,-(r-l)*d-k);
}
else
{
scanf("%d",&d);
printf("%lld\n",query(1,1,d));
}
}
return 0;
}
2022春每日一题:Day 26的更多相关文章
- <每日一题>题目26:选择排序(冒泡排序改进版)
''' 选择排序:选择最小的,以此类推 ''' import random import cProfile def select_Sort(nums): for i in range(len(nums ...
- 老男孩IT教育-每日一题汇总
老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...
- PL/SQL Challenge 每日一题:2014-3-14 11gR2中带RELIES_ON子句的RESULT_CACHE函数
PL/SQL Challenge 每日一题:2014-3-14 11gR2中带RELIES_ON子句的RESULT_CACHE函数 最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可 ...
- 【JavaScript】【dp】Leetcode每日一题-解码方法
[JavaScript]Leetcode每日一题-解码方法 [题目描述] 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 'A' -> 1 'B' -> 2 ... 'Z' -& ...
- 【python】Leetcode每日一题-前缀树(Trie)
[python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...
- LeetCode 每日一题「判定字符是否唯一」
我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 题目 ...
- 【Java每日一题】20170106
20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170105
20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170104
20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170103
20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
随机推荐
- KingbaseES XA 分布式事务
在分布式系统中,各个节点(或者事务参与方)之间在物理上相互独立,各节点之间无法确切地知道其它节点中的事务执行情况,所以多节点之间很难保证ACID,尤其是原子性.如果是单节点的事务,由于存在事务机制,可 ...
- 使用Pipeline抽象业务生命周期流程
上篇关于流程引擎的文章还是快两年以前的<微服务业务生命周期流程管控引擎>,这中间各种低代码平台层出不穷,虽然有些仅仅是OA+表单的再度包装,但有些的确是在逻辑和操作单元层面进行了真正的高度 ...
- linux下安装mysql(rpm安装)
Mysql 5.7.29安装步骤 1.首先卸载自带的Mysql-libs(如果之前安装过mysql,要全都卸载掉) rpm -qa | grep -i -E mysql\|mariadb | xarg ...
- Exchange 2019中启用自动转发到外部域
今天遇到一个用户反映自动转发的邮件规则没有生效.检查了一下,邮件规则配置没有问题.用户邮箱也能正常收到邮件,但是就是没有转发出去.仔细检查邮件规则,转发的收件人是外部邮箱.Exchange出于安全考虑 ...
- Java SE 7、接口
接口 接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来 语法 interface 接口名{ //属性 //方法 } class 类名 imple ...
- vue方法同步(顺序)执行:async/await使用
https://blog.csdn.net/qq_38591756/article/details/90173323 项目中有一个地方需要获取到接口返回值之后根据返回值确定之后执行的步骤,使用asyn ...
- Elasticsearch 集群健康值红色终极解决方案
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247483905&idx=1&sn=acaff63 ...
- MySQL一致性读原来是有条件的
众所周知,在设定了隔离等级为Repeatable Read及以上时,InnoDB 可以实现数据的一致性读.换句话来说,就是事务执行的任意时刻,读取到的数据是同一个快照,不会受到其他事务的更新影响. 以 ...
- kibana安装安装插件
命令语法:bin/kibana-plugin install <package name or URL> 当您指定的插件名没有带 URL,插件工具将会尝试去下载 Elastic 官方插件. ...
- 使用coverlet统计单元测试的代码覆盖率
单元测试是个好东西, 可以在一定程度上兜底 虽然写单元测试这件事情非常麻烦 但是好的单元测试可以显著提高代码质量, 减少bug, 避免无意中的修改导致其他模块出错 写测试用例的过程中, 靠人力去确保所 ...