正解:树状数组+差分

解题报告:

戳我!

不得不说灵巧真滴是越来越弱了...连模板题都要放上来了QAQ

因为今天考试的T3正解要用到树状数组这才惊觉树状数组掌握得太太太太差了...之前一直靠线段树续着一条狗命 然后又感觉树状数组好像挺复杂挺难明白的就一直没了解也懒得去理解QAQ

然后赶紧就滚去把两个模板给做了

1就懒得港了实在太模板了,2的话是因为还要用差分然后巧的是差分我也不会so就顺便把差分也了解了下quq所以就觉得写下题解记录下趴quq

首先港下差分到底是个啥趴quq

其实我记得最开始我了解前缀和然后看线段树的时候有个大胆沙雕的想法,就是说,我能不能就用个差分(当时还不知道叫差分...反正就想着开个数组存他们滴差)然后如果要修改我其实只用修改一个变量嘛是吧

当然这种不切实际的玩意儿很快就会被推翻的--差分只支持单次修改多次查询,像线段树的题目都是多次修改很快就GG了

但是!在这里!我滴sd想法居然给了点儿启发!

我们可以开个树状数组专门存差分,然后因为差分这个神奇的玩意儿的存在我们在修改一个区间的时候事实上是只用修改两个值的!然后就用树状数组维护一下就好了!(但是这里要注意一下就是,这个并不能推广开大规模使用,因为你可以发现,差分之和全部加起来其实是只有一个数的值的(小学奥数你应该没有那么蠢?)相当于我只能用来处理查询一个数的值对蛤?好了会了这个就没有什么问题辣!

放代码!

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rp(i,x,y) for(ll i=x;i<=y;++i)
#define lowbit(x) x&(-x)
ll n,m,tr[],x,y;
ll read()
{
    ;;
    '))ch=getchar();
    ;
    )+(x<<)+(ch^'),ch=getchar();
    return y?x:-x;
}
void update(ll x,ll d){while(x<=n)tr[x]+=d,x+=lowbit(x);return;}
ll query(ll x){ll ans=;)ans+=tr[x],x-=lowbit(x);return ans;}
int main()
{
    n=read();m=read();
    rp(i,,n)x=read(),update(i,x-y),y=x;
    rp(i,,m)
    {
        ll a=read(),b=read();
        ){ll c=read(),d=read();update(b,d);update(c+,-d);}
        else printf("%lld\n",query(b));
       }
    ;
}

点我♂看♂傻逼灵巧在线WA!

哦对了我有点儿担心以后你突然一下脑抽又感觉无法理解树状数组了,所以还是存下我浅薄滴理解(umm...如果有错麻烦看到了的大佬私信我下给我指正下错误不胜感激QAQ

就反正我觉得是你可以理解为它这个tr中每个元素是从它标号那个位置右往左存 存的个数为它的lowbit

好了over

哇我怎么讲得这么简略...得嘞我觉得以后如果我没懂了回来翻还是懂不了QAQ

洛谷P3368 树状数组2 树状数组+差分的更多相关文章

  1. 模板【洛谷P3368】 【模板】树状数组 2

    P3368 [模板]树状数组 2 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 树状数组区间加,单点查询. code: #include <i ...

  2. 洛谷 P3373 【模板】线段树 2

    洛谷 P3373 [模板]线段树 2 洛谷传送门 题目描述 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上 xx 将某区间每一个数加上 xx 求出某区间每一个数的和 输入格式 第一 ...

  3. 洛谷 P3368 【模板】树状数组 2 题解

    P3368 [模板]树状数组 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个 ...

  4. 洛谷P2617 Dynamic Ranking(主席树,树套树,树状数组)

    洛谷题目传送门 YCB巨佬对此题有详细的讲解.%YCB%请点这里 思路分析 不能套用静态主席树的方法了.因为的\(N\)个线段树相互纠缠,一旦改了一个点,整个主席树统统都要改一遍...... 话说我真 ...

  5. 洛谷P5069 [Ynoi2015]纵使日薄西山(树状数组,set)

    洛谷题目传送门 一血祭 向dllxl致敬! 算是YNOI中比较清新的吧,毕竟代码只有1.25k. 首先我们对着题意模拟,寻找一些思路. 每次选了一个最大的数后,它和它周围两个数都要减一.这样无论如何, ...

  6. BZOJ3262/洛谷P3810 陌上花开 分治 三维偏序 树状数组

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672131.html 题目传送门 - BZOJ3262 题目传送门 - 洛谷P3810 题意 有$n$个元素,第 ...

  7. [NOIP2013提高&洛谷P1966]火柴排队 题解(树状数组求逆序对)

    [NOIP2013提高&洛谷P1966]火柴排队 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相 ...

  8. 洛谷 P4396 (离散化+莫队+树状数组)

    ### 洛谷P4396  题目链接 ### 题目大意: 有 n 个整数组成的数组,m 次询问,每次询问中有四个参数 l ,r,a,b .问你在[l,r] 的区间内的所有数中,值属于[a,b] 的数的个 ...

  9. 洛谷 P1972 [SDOI2009]HH的项链——树状数组

    先上一波题目 https://www.luogu.org/problem/P1972 这道题是询问区间内不同数的个数 明显不是正常的数据结构能够维护的 首先考虑 因为对于若干个询问的区间[l,r],如 ...

  10. 【题解】洛谷P1966 [NOIP2013TG] 火柴排队(树状数组+逆序对)

    次元传送门:洛谷P1966 思路 显然在两排中 每排第i小的分别对应就可取得最小值(对此不给予证明懒) 所以我们只在意两排的火柴是第几根 高度只需要用来进行排序(先把两个序列改成有序的方便离散化) 因 ...

随机推荐

  1. zabbix设置报警通知

    邮件通知是最流行的报警通知方式,这里配置邮件通知 1. 配置通知邮箱信息(发件人)的邮箱信息 2. 填写信息 3. 事件(Action)通知配置 点击创建动作 添加一个触发条件 点击添加 添加一个操作 ...

  2. 使用createprocess()创建进程打开其他文件方法

    #include "stdafx.h"#include "windows.h"#include <iostream>#include "s ...

  3. Windows平台JDK8下载和安装说明

    本页介绍如何安装和卸载Windows的JDK 8. 该页面包含以下主题: “系统要求” “安装说明符号” “安装说明” “卸载JDK” “已安装的目录树” “安装疑难解答” 有关安装JDK 8和JRE ...

  4. thinkphp3.2 实现上一篇和下一篇

    现在在做一个能够在内容页点击上一篇可以看到上一篇,点击下一篇可以看到下一篇. 首先http://www.mmkb.com/zhendao/index/news_show?code=98 现在code= ...

  5. 【Redis使用系列】使用Redis做防止重复提交

    前言 在平时的开发中我们都需要处理重复提交的问题,避免业务出错或者产生脏数据,虽然可以通过前端控制但这并不是可以完全避免,最好的方式还是前后端均进行控制,这样的话就可以更有效,尽可能全面的去减少错误的 ...

  6. 分页SQL代码

    city_id ORDER BY city_id )

  7. Sencha Touch 实战开发培训 视频教程 第二期 基础提高篇 预告

    “抛砖网”国内首家首创纯实战型培训机构,提供在线培训.技术指导及答疑! 团队通过360全方位技术培训+1度手把手技术指导,保证每一个学员能最快掌握实际工作技能: 让每一个学员都能站在我们的肩膀上,展翅 ...

  8. 墨菲定律:当你觉得一个地方可能有bug,那么这个地方就会有bug----顺带了解下Tomcat那少有人注意的localhost.log

    一.问题概述 题目有点长,但应该值得后端java们了解下有点小坑的localhost.log,让我长话短说. 博主是搞java后端的.后台是很简单的spring mvc + spring框架. 今天测 ...

  9. Android 基于 Speex 的高度封装语音库,0 耦合,没三方jar包

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  10. Linux大文件已删除,使用df查看已使用的空间并未减少

    今天在一台Linux系统里,使用df命令查看磁盘使用情况,发现/根分区使用了100% 然后删除一大文件/var/lib/pgsql/9.1/pgstartup.log,再使用df查看使用情况,显示内容 ...