这样的数据结构称作树状数组,它支持O(logN)的单点修改和区间查询,效率高并且代码简洁,缺点在于适用范围不如线段树广。不难看出(雾),tree[i]表示a[i]及之前的 lowbit(i)个 数,定义lowbit(i)等于取i的二进制中最后一个'1'表示的大小观察发现(。),修改a[i]只需更新包 ...
分类:
编程语言 时间:
2020-02-16 01:10:00
阅读次数:
72
一、分治算法 分而治之,即把原问题分割成同等结构的子问题,之后针对子问题逐一解决。 插入排序更关心的是治。 归并排序更关心的是分,如何均匀分的问题。 二、分治算法应用 求逆序数 1. 什么是逆序数? 排在前面的元素比后面大。例如:序列 3 5 6 8 1 ;8排在1前面,但是8 > 1。逆序数反映的 ...
分类:
编程语言 时间:
2020-02-15 21:45:56
阅读次数:
86
树状数组 一、长什么样? 假设有一数组a,数组b为a的前缀和数组,即b[i] = a[i] + a[i 1] + ... + a[1],树状数组c为a的(部分)前缀和数组,即c[i] = a[i] + a[i 1] + ... + a[i+1 lowbit(i)],也即c[i]为lowbit(i)个 ...
分类:
编程语言 时间:
2020-02-14 22:28:27
阅读次数:
95
树状数组不难理解,学的还算轻松,它的核心就是一个lowbit的运用,学之前还特地把位运算重新学了一遍。 //位运算符:& | ^ ~ << >> int a1=60,b1=13; //在二进制中, //a=00111100 //b=00001101 int c1=a1&b1;//对应每一位做与运算, ...
分类:
编程语言 时间:
2020-02-14 22:13:53
阅读次数:
87
本文始发于个人公众号: TechFlow ,原创不易,求个关注 在之前介绍线性代数行列式计算公式的时候,我们曾经介绍过逆序数:我们在列举出行列式的每一项之后,需要通过逆序数来确定这一项符号的正负性。如果有忘记的同学可以回到之前的文章当中复习一下: "线性代数行列式" 如果忘记呢,问题也不大,这个概念 ...
分类:
编程语言 时间:
2020-02-13 10:05:22
阅读次数:
71
这道题用树状数组做比较好,虽然树状数组能做的线段树也可以做到,但是树状数组更简洁方便,易操作 原理便是第x个数的二进制数最后一个“1”,决定tree的结点的长度 比如: sum[3]=tree[3]+tree[2]; sum[4]=tree[4]; sum[5]=tree[5]+tree[4]; 分 ...
分类:
其他好文 时间:
2020-02-12 13:15:00
阅读次数:
42
话说主席树还没写就先写这一篇了$qwq$ 回顾一下主席树的实现过程:类似查分思想,将线段树的每次修改看做函数式以支持可持久化。因为这样的线段树是可减的。 那么我们维护信息的时候,就要维护每一次新形成的信息。但是我们可以根据前一个信息的基础上进行改动,而不必要去再建一棵树。 所以总而言之,是前缀和的思 ...
分类:
编程语言 时间:
2020-02-11 11:20:46
阅读次数:
96
Color the ball HDU - 1556 N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮 ...
分类:
编程语言 时间:
2020-02-10 22:29:36
阅读次数:
98
/* 虽然题目没说,但是读入有以下特点 由于,输入是按照按照y递增,如果y相同则x递增的顺序给出的 所以,可以利用入读的时间进行降为处理 */ 于是我们就得到了一个一维的树状数组解法啦 值得一提:坐标从0~32000,而树状数组是从1开始的 于是,我们对所有下标+1,数组开到32002就可以啦! 1 ...
分类:
编程语言 时间:
2020-02-10 19:41:13
阅读次数:
55