
树状数组
Marcus-Bao
这个作者很懒,什么都没留下…
展开
-
hdu 1166 敌兵布阵 树状数组解法
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。 中央情报局要研究敌人究竟演习什么战术,原创 2017-02-10 22:17:39 · 526 阅读 · 0 评论 -
Gym - 101572G
题目大意一场比赛, 每个队伍的分数由(a, b)组成, a是做题数量, b是总罚时, 题量多的排名前, 相同题量罚时少靠前, 如果题量罚时都相同, 排名一样, 例如, (1, 1), (1, 1), (0, 0)三支队伍排名为1, 1, 2 现在有n支队伍, m个事件, 每个事件由(t, p)组成, 代表队伍t以罚时p做出了一题 让你输出每个事件后, 队伍1的排名思路先预处理出所有可能的(a原创 2017-11-03 23:37:00 · 460 阅读 · 0 评论 -
HDU - 5869 Different GCD Subarray Query GCD+离线+树状数组(区间不同gcd的个数)
题目链接 题意:给定一个a数组,每次询问一个区间[l,r]求这个区间内所有子区间的gcd的种类。 思路:这个题目类似于区间不同数的个数首先知道gcd的性质,在固定一个端点的情况下,连续区间的gcd的个数最多为log级别的. 我们可以固定每个点作为右端点,然后预处理出以该点为右端点的所有不同gcd的情况,相同gcd的取左端点大的.最后离线处理所有的询问,用树状数组维护一下即可》#incl原创 2017-10-05 22:42:21 · 346 阅读 · 0 评论 -
SPOJ - DQUERY D-query 离线+树状数组 (区间不同数的个数)
题目链接题意:给你n 个数,给你q个询问,每个询问问你某个区间上不同数的个数是多少?思路:q那么大,a[i]最大值为1e6可以想到用离线和BIT来处理.将所有询问记录,按右端点升序排序,对于一个a[i]如果在前面被更新过了,那么就把他删除,在新的位置更新.再处理没超过该范围的所有的区间,最后输出即可.#include#define P pair原创 2017-10-03 00:18:49 · 648 阅读 · 0 评论 -
CodeForces - 540E Infinite Inversions BIT+加点离散化
题目链接题意:给一个无限大的递增序列,n次操作,每次操作一组x,y,代表第x位置的数和第y位置的数进行交换,问最后n次交换后存在多少对逆序对。(n思路:发现x,y很大,但是n很小可以考虑离散化。但是发现离散化之后每几个数之间未操作的数会对结果影响,所以我们这里就有一个技巧,将每两个要交换的数之间未被操作的一段离散化成一个点,加入到新点钟,再用num[i]记录这一原创 2017-09-29 23:56:45 · 503 阅读 · 2 评论 -
codeforces 869E The Untended Antiquity 二维BIT + hash
题目链接 题意:在 n×m 的二维图上,有三种操作: 1 r1 c1 r2 c2 表示沿着 (r1, c1, r2, c2) 所表示的矩形的外边框建围墙。(其中 (r1, c1) 为矩形左上角,(r2, c2) 表示矩形右下角)。 2 r1 c1 r2 c2 表示取消 (r1, c1, r2, c2) 所示矩形的围墙。(保证最初图不存在围墙,删除的围墙一定是之前通过操作 1 建立的)。 3原创 2017-10-07 23:36:52 · 444 阅读 · 0 评论 -
HDU - 5792 World is Exploding 思维+离散化+树状数组
题目链接题意:给出一个长度为n的整数序列,要求输出有多少个四元组{a,b,c,d}。满足1Vd思路:我们先定义几个数组:lmi[i] 表示1...i-1 比i小的有几个lmx[i] 表示1...i-1比i大的有几个rmi[i] 表示i+1...n比i小的有几个rmx[i] 表示i+1..n比i大的有几个.原创 2017-09-03 00:10:12 · 363 阅读 · 0 评论 -
hdu 5862 Counting Intersections 扫描线+树状数组
题目链接题意:给你n条线段,求有多少个交点.思路:有感觉是扫描线,可是做的不多不会操作啊 = =.假设我们用平行于y轴的线段去扫描,那么需要的就是对y坐标进行离散化.将所有平行于x轴的线段,拆成两个点,(x1,y),(x2,y).,竖线段不变.然后进行离散化,全部按照x坐标升序排序.然后依次遍历这些线段,遇到线段左端点就把对应y在树状数组中的位置+1,右原创 2017-09-14 00:03:41 · 367 阅读 · 0 评论 -
HDU - 5877 Weak Pair dfs+离散化+树状数组
题目链接题意:n个节点的树,节点的点权为ai,要求找出有多少个二元组(u,v)满足1:u是v的祖先且u!=v2:a[u]*a[v]思路: 先把2转化一下:a[u] 上面那个a[u] 不等式即可.这个过程可以考虑为一个dfs过程,我们一边dfs一边查询即可。这里可以用一个树状数组,每遍历到一个就把他对应树状数原创 2017-09-03 23:59:11 · 444 阅读 · 0 评论 -
二维树状数组模板
#include#include#includeusing namespace std;const int maxn=1e3+10;int c[maxn][maxn];int n,t;int lowbit(int x){ return x&-x;}void add(int x,int y,int num){ for(int i=x;i<=n;i+=lowbit(i))原创 2017-05-31 23:01:00 · 317 阅读 · 0 评论 -
URAL - 2062 Ambitious Experiment 树状数组
题目链接题意:给出n个数字,有两个操作,一个是查询某个位置上的数值,另一个是给定区间[l,r]和一个数字d,要求从l到r中的每个位置i开始,a[i]增加d,a[2*i],a[3*i], … ,每个位置都增加d。 思路:其实写这个题没什么意思,就是它让我加深了对树状数组的理解吧这道题还有别的方法 后续的话可能会补上,用树状数组的话也仅仅是擦线过,也是T了无数发才a了原创 2017-03-23 00:13:18 · 547 阅读 · 0 评论 -
树状数组总结
对于普通数组,其修改的时间复杂度位O(1),而求数组中某一段的数值和的时间复杂度为O(n),因此对于n的值过大的情况,普通数组的时间复杂度我们是接受不了的。在此,我们引入了树状数组的数据结构,它能在O(logn)内对数组的值进行修改和查询某一段数值的和。树状数组是一个查询和修改复杂度都为log(n)的数据结构,假设数组a[1..n],那么查询a[1]+...+a[n]的时间是log级别的,转载 2017-02-10 22:01:43 · 1244 阅读 · 0 评论 -
历届试题 小朋友排队 树状数组求逆序对
问题描述 n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。 每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。 如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。原创 2017-02-11 22:00:30 · 955 阅读 · 0 评论 -
青出于蓝胜于蓝 (dfs序 + BIT)
传送门思路: 首先一眼dfs序,转化成序列问题来解决这是没有问题的 但是我在如何求徒弟中武功比他高的时候纠结好久。。。其实是我在dfs序中编的号和他给的武功等级让我很混乱了/// 这里就运用了树状数组求逆序对的那种思想,我从武功最高的人开始(等级为1的)先看他徒弟的整个区间内是否为0,为0就代表徒弟武功都没他高,然后在把他对应的编号+1(因为我们是按照武功...原创 2018-03-30 21:51:53 · 334 阅读 · 0 评论