随笔分类 - 数据结构——树状数组
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5542 求一个长度为n的序列的长度为m的严格上升子序列的数量,dp的状态是前i个数中长度为j的严格上升子序列且以第i个数结尾的决策数量。 转移方式:长度为i-1向长度为i转移,枚举位置比它小而且值比它小的
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/245/ 题目给出一个长度为n-1的序列表示一个位置前面有多少个比他小,问这个序列是多少?这个序列是一个1-n的全排列。 通过从后向前扫描可知每个位置的编号,比如最后一个是an+1,这个位置在之后不考虑,然后从接
阅读全文
摘要:题目链接:http://poj.org/problem?id=3468 树状数组的区间修改区间查询模式,简单题目。用差分以及维护两个数列。 代码: #include<iostream> #include<cstdio> using namespace std; typedef long long l
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/243/ 给定一个全排列,对于每个位置,都求前面有多少个数比它小,有多少个数比他大,右边有多少个数比他小有多少个数比他大。通过树状数组可以在O(nlogMAX)时间内求出。 代码: #include<iostre
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P5057 题目中首先给出一个全零序列,操作有两种,一种是将[l,r]区间的01序列取反,还有一种是单点更新。我们考虑到取反可以让这个位与1求异或,可以用树状数组更新一段,异或运算和加法运算有着很相似的地方,对于加法,我们为
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1972 题意大致是:给定一个序列长度为n,给出m个查询区间,要求响应是区间内不同的数的个数。为此我们考虑到树状数组的区间查询时间复杂度是O(logn),对于题目1e6的数据O(mlogn)的复杂度是能过的。所以我们考虑用
阅读全文
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/2838/ 题目解法:题目给出一个1-n的排列,操作只有一种:交换相邻的元素,代价是两个元素之和,问将该序列变成升序排列的最小代价。就是要在线求解,每输入一个数a就要查询之前的数中有多少数比a大,这些数由于在a的前面
阅读全文
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/2642/ 代码如下: 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define scan(n) scanf("%d",&n) 4 #define f(i,
阅读全文
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/2492/ 题目大意:给定一个序列,求长度为三的子序列(a,b,c)使得a<b<c或a>b>c,求这样的序列的个数;只要对于每一个位置的数,用树状数组维护前缀和,求出该位置前面比他大的数的个数和比他小的个数,再用另一
阅读全文
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1541/ 题意是:在二维图上有一系列坐标,其中坐标给出的顺序是:按照y升序排序,如果y值相同则按照x升序排序。这个信息十分关键,所以借此我们可以知道最新给出点A(x,y)之后,y大于等于任何之前点的y值,所以只要知
阅读全文
摘要:hdu 1166排兵布阵 单点修改+区间查询的树状数组的应用: 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef unsigned int ui; 4 typedef long long ll; 5 typedef unsigned
阅读全文
摘要:树状数组也可说是二分索引树,是一种高级数据结构,但其实用起来很方便。 本文参考博客如下: http://www.cppblog.com/menjitianya/archive/2015/11/02/212171.html https://blog.csdn.net/zars19/article/de
阅读全文