2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)热身赛 B.这是一道大水题(树状数组)

简介: 2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)热身赛 B.这是一道大水题(树状数组)

20200401134307494.png20200401134307494.png

思路:

对于操作打分来说,整个数的贡献为( r − l + 1 ) ∗ z。而对于区间里的任意一个数,如果在询问操作里被提出,整个区间的贡献都是不计的。所以,对于操作打分来说,将区间里的所有数都加上( r − l + 1 ) ∗ z;对于操作询问x来说,用总贡献减去x所在区间的贡献就是答案。

相当于区间修改+单点查询,套个数据结构就行了。

代码是用的树状数组。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+7;
ll a[N],c[N];//原数组和树状数组
ll n,m;
inline ll read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
inline ll lowbit(ll x){
    return x&-x;
}
void add(ll i,ll k){
    while(i<=n){
        c[i]+=k;
        i+=lowbit(i);
    }
}
ll sum(ll i){//求a[1]到a[n]的和
    ll res=0;
    while(i>0){
        res+=c[i];
        i-=lowbit(i);
    }
    return res;
}
int main(){
    n=read();m=read();
    ll ans=0;
    while(m--){
      ll op=read();
      if(op==0){
        ll l=read(),r=read(),z=read();
        ll now=(r-l+1)*z;
        ans=ans+now;
        add(l,now);add(r+1,-now);
      }
      else{
        ll x=read();
        printf("%lld\n",ans-sum(x));
      }
    }
    return 0;
}


目录
相关文章
|
1月前
|
存储 分布式计算 算法
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
39 0
|
14天前
|
机器学习/深度学习 算法 搜索推荐
编程之舞:探索算法的优雅与力量
【6月更文挑战第10天】在软件的世界里,算法是构筑数字宇宙的基石。它们如同精心编排的舞蹈,每一个步骤都充满着逻辑的美感和解决问题的力量。本文将带领读者走进算法的世界,一起感受那些精妙绝伦的编程思想如何转化为解决现实问题的钥匙。
15 3
|
1天前
|
人工智能 算法 搜索推荐
Java算法编程详解和程序实例
Java算法编程详解和程序实例
|
15天前
|
算法 安全 数据挖掘
解锁编程之门:数论在算法与加密中的实用应用
解锁编程之门:数论在算法与加密中的实用应用
|
1月前
|
设计模式 算法 Java
如何在面试中应对编程与算法面试?
面试中,编程能力至关重要,主要分为三个层次:初级关注基本功,如语法、原理和常见问题解决;高级涉及数据结构与算法,基础算法如排序对中小厂重要,大厂则需深入数据结构;资深专家层次需精通设计模式,以保证代码的扩展性和维护性。提升编程技能可采用PDCA循环学习法,从计划到执行、检查、行动不断迭代。通过实践项目如开发后端系统、测试框架来检验学习成果,并逐步学习算法和设计模式。坚持不懈的努力和重构将助你成为技术专家。记住,超越大多数人的关键在于持续学习和专注深耕。
14 0
如何在面试中应对编程与算法面试?
|
1月前
|
算法 搜索推荐 Serverless
掌握Go语言:Go语言递归函数,解密编程之谜,探索算法的奥秘!(27)
掌握Go语言:Go语言递归函数,解密编程之谜,探索算法的奥秘!(27)
|
1月前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
44 0
|
1月前
|
存储 算法 JavaScript
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(二)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
62 0
|
1月前
|
算法 搜索推荐 程序员
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(一)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
62 0
|
1月前
|
算法 自然语言处理 双11
算法设计_综合练习_编程题
算法设计_综合练习_编程题
15 0