洛谷P3368 树状数组2 树状数组+差分
正解:树状数组+差分
解题报告:
不得不说灵巧真滴是越来越弱了...连模板题都要放上来了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 树状数组+差分的更多相关文章
- 模板【洛谷P3368】 【模板】树状数组 2
P3368 [模板]树状数组 2 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 树状数组区间加,单点查询. code: #include <i ...
- 洛谷 P3373 【模板】线段树 2
洛谷 P3373 [模板]线段树 2 洛谷传送门 题目描述 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上 xx 将某区间每一个数加上 xx 求出某区间每一个数的和 输入格式 第一 ...
- 洛谷 P3368 【模板】树状数组 2 题解
P3368 [模板]树状数组 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个 ...
- 洛谷P2617 Dynamic Ranking(主席树,树套树,树状数组)
洛谷题目传送门 YCB巨佬对此题有详细的讲解.%YCB%请点这里 思路分析 不能套用静态主席树的方法了.因为的\(N\)个线段树相互纠缠,一旦改了一个点,整个主席树统统都要改一遍...... 话说我真 ...
- 洛谷P5069 [Ynoi2015]纵使日薄西山(树状数组,set)
洛谷题目传送门 一血祭 向dllxl致敬! 算是YNOI中比较清新的吧,毕竟代码只有1.25k. 首先我们对着题意模拟,寻找一些思路. 每次选了一个最大的数后,它和它周围两个数都要减一.这样无论如何, ...
- BZOJ3262/洛谷P3810 陌上花开 分治 三维偏序 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8672131.html 题目传送门 - BZOJ3262 题目传送门 - 洛谷P3810 题意 有$n$个元素,第 ...
- [NOIP2013提高&洛谷P1966]火柴排队 题解(树状数组求逆序对)
[NOIP2013提高&洛谷P1966]火柴排队 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相 ...
- 洛谷 P4396 (离散化+莫队+树状数组)
### 洛谷P4396 题目链接 ### 题目大意: 有 n 个整数组成的数组,m 次询问,每次询问中有四个参数 l ,r,a,b .问你在[l,r] 的区间内的所有数中,值属于[a,b] 的数的个 ...
- 洛谷 P1972 [SDOI2009]HH的项链——树状数组
先上一波题目 https://www.luogu.org/problem/P1972 这道题是询问区间内不同数的个数 明显不是正常的数据结构能够维护的 首先考虑 因为对于若干个询问的区间[l,r],如 ...
- 【题解】洛谷P1966 [NOIP2013TG] 火柴排队(树状数组+逆序对)
次元传送门:洛谷P1966 思路 显然在两排中 每排第i小的分别对应就可取得最小值(对此不给予证明懒) 所以我们只在意两排的火柴是第几根 高度只需要用来进行排序(先把两个序列改成有序的方便离散化) 因 ...
随机推荐
- Linux 查看目录大小及文件数量命令
查看当前目录大小: [root@21andy.com]# du -sh 查看指定目录大小: [root@21andy.com]# du -sh /www/21andy.com 查看当前目录文件总数: ...
- HTML 水平线
<hr /> 标签可以在 HTML 页面中创建水平线,通常用来分隔文章中的小节 <!DOCTYPE HTML> <html> <body> <p& ...
- 剑指offer面试题6:重建二叉树
1.题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. public class Solution { public TreeNode reConstructBinaryTree(int ...
- iptables 指令语法
iptables 指令 语法: iptables [-t table] command [match] [-j target/jump] -t 参数用来指定规则表,内建的规则表有三个,分别是:nat. ...
- 【Linux】`ImportError: No module named '_tkinter'
在centos7 系统下,导入matplotlib时,出现ImportError: No module named '_tkinter'的错误 首先使用以下命令查看模块是否存在 yum list in ...
- Delphi应用程序的调试(一)
集成式调试器是Delphi IDE的一个重要特性.该调试器使用户能方便地设置断点.监视变量.检查对象等等.在运行程序时,使用该调试器能快速查找出程序发生了什么(或未发生什么).一个号的调试器对程序开发 ...
- 一.jquery.datatables.js表格显示
2014年8月10日星期日 使用jquery.datatables.js取后台数据. 1.html代码 <table class="dataTables-example"&g ...
- m个苹果放入n个篮子
题目 :X个相同的苹果放入Y个篮子,(1)篮子可以为空 ,篮子不同. 放法有C(X+Y-1,Y-1 );// (2)篮子不可以为空,篮子不同.放法有C(X-1,Y-1) //插挡板法 分析有了这个组合 ...
- 转载->C#中的委托的使用和讲解
C# 中的委托 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容 ...
- Android.mk (1) 函数
https://www.jianshu.com/p/46224d15fc5f 从函数说起 大家都习惯看从头,从构建目标讲起的,导致每篇文档熟的都是前面的部分.很多教程也都是想办法能够观其大略,从整体上 ...