正解:树状数组+差分

解题报告:

戳我!

不得不说灵巧真滴是越来越弱了...连模板题都要放上来了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. Android开发-- The content of the adapter has changed but ListView did not receive a notification - With AsyncTask

    最近在联系开发DaysMatter时遇到一个问题: app中使用ListView来展示所有事件,每次添加完事件后使用下面代码来更新ListView. toDoListView.refreshDrawa ...

  2. Ubuntu 13.10 下安装搜狗输入法

    1.卸载ibus输入法: sudo apt-get remove ibus     sudo为取得root权限的意思,Ubuntu系统默认root账户关闭,很多操作需要取得root     权限才可以 ...

  3. Linux ab 命令

    ab 是一个性能测试工具,用来测试一个页面每秒钟能处理多少HTTP请求 [root@localhost ~]$ yum install -y httpd-tools # 安装ab工具 [root@lo ...

  4. 系统头文件cmath,cstdlib报错

    >C:\Program Files (x86)\Microsoft Visual Studio\\Community\VC\Tools\MSVC\\include\cstdlib(): erro ...

  5. vue再次入手(数据传递②)

    接上篇~ 5.最后一种,互通:无所谓父组件或者是子组件,而是随时随地都能调用到数据的一种方法.便是利用vuex来管理数据,官网描述: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它 ...

  6. [Z]修炼成C++高手必看的C++书单

    增添于网上的一些书单: C++/OPP/OOD系列: 层级一:语法/语意(C++) [Lippman2000] Essential C++ Essential C++,by Stanley B. Li ...

  7. odbc数据源for mysql

    1. 下载mysql适配器并安装 mysql-connector-odbc-3.51.20-win32.exe 2. 配置数据源 “开始” ->”管理工具“ -> “数据源(ODBC)”- ...

  8. spring applicationContext.xml 配置文件 详解

      <?xml version="1.0" encoding="UTF-8"?>   <beans xmlns="http://ww ...

  9. Python学习(24):Python面向对象(2)

    转自 http://www.cnblogs.com/BeginMan/p/3191037.html 一.类 类就是一个数据结构,封装了数据和操作. 类的声明与函数的声明十分类似: class newC ...

  10. Androd Toolbar 的简单使用(转)

    14年Android开发者大会提出了Android5.0 系统以及 材料设置 Material Design.在 材料设计中推出了大量的UI效果,其中某些功能 已添加进 兼容包,所以可以在低版本中来实 ...