
线段树树状数组
青春苦瓜
这个作者很懒,什么都没留下…
展开
-
线段树(单点更新、区间更新) 树状数组 模板整理
线段树单点更新#include<iostream>#include<cstdio>#include<string.h>using namespace std;const int maxn=1e5+5;struct node{ int l,r,value,lazy;}tree[maxn<<2];void pushup(int m){...原创 2019-08-04 11:36:54 · 151 阅读 · 0 评论 -
线段树求逆序数模板 POJ 1394 模板+思维, POJ2299 模板+离散化
先说一下线段树求逆序数的原理:从1到数列中最大的数n+1建树然后从a[1]开始 对于每个i ,我先查询ai+1到n+1 (注意 这是数,不是下标)已经有多少个数存在于树中了,有多少个,那么与ai构成的逆序对数就是多少。cnt+=query(1,ai+1,n+1);然后插入。最后cnt就是逆序对数模板#include<iostream>#include<cstdio&g...原创 2019-08-04 15:51:59 · 173 阅读 · 0 评论 -
HDU - 5475 An easy problem 线段树
题意:每次给定两种操作中的一种操作1:乘上x 然后%mod 输出操作2:除以第x次操作乘的那个数,输出mod思路:由于模的存在,不能直接除以之前乘的那个数,暴力能水过,我们考虑线段树线段树记录区间乘积对于每个点i(对应于第i次操作),如果是乘法,就把该点更新成x,如果是除法,就更新成1,这样就相当于没成。然后查询区间乘积,区间是1~当前的i,其实也可以直接输出根节点的值,因为后面没涉...原创 2019-08-06 19:31:32 · 157 阅读 · 0 评论 -
HDU 3333,SPOJ-DQUERY 线段树+离散化+离线处理
SPOJ-DQUERY 题意是求区间内不同数的个数HDU 3333是求区间内不同数的和做法基本上差不多,先存起区间来,然后按区间右端点由小到大排序然后遍历每个区间先依次把序列插入到线段树中(到区间右端点停止),在这个过程中,用book数组记录这个数之前出没出现过 出现过的话book数组记录的是该数的位置,没出现过的话就是0,(HDU这道题数的范围是1e9因此需要离散化,SPOJ不用),如...原创 2019-08-06 20:19:57 · 216 阅读 · 0 评论 -
HDU 4417 Super Mario 线段树+离线处理
题意:给定序列a每次给出区间l,r和k求区间内小于k的数的个数思路:先离线处理,按每个区间的k由小到大排序,然后再把给出的序列从小到大排序(并记录下位置)外层遍历区间,内层遍历排序后的序列,依次插入(插入到当前区间k停止),然后查询区间并保存即可#include<iostream>#include<cstdio>#include<string.h&g...原创 2019-08-06 20:24:03 · 121 阅读 · 0 评论