树状数组
WePlayDirty
emmmmmmm
展开
-
poj3321 Apple Tree
dfs搜索记录每个节点的dfs序l,以及其子节点最大的dfs序r,dfs序在区间[l,r]之间的就是dfs序为l的节点的子孙节点。查询节点P的果实个数,即使查询P对应的dfs序区间的和。要把用树状数组维护的区间上的某一点改为num,可以先记录每个位置的值,计算出增量,再update。有点坑的是卡vector,TLE#include#include#include#includ原创 2016-07-25 09:11:32 · 2291 阅读 · 0 评论 -
poj1195 Mobile phones
裸的二维树状数组#include#include#define maxn 1100int tree[maxn][maxn];int lowbit(int x){ return x&(-x);}void update(int x,int y,int num,int R,int C){ int i,j; for(i=x;i<=R;i+=lowbit(i))原创 2016-07-25 09:33:28 · 2149 阅读 · 0 评论 -
(多校第四场1012)HDU5763 Bubble Sort (树状数组)
给出一串数是(1~n)的一个排列,问在冒泡排序过程中,每个数会出现的最右端位置和最左端位置的差。一开始想用归并排序做,但是发现归并和冒泡的交换次数相同,但是每个数出现的位置是不同的。所以归并不可行。最后发现,由左向右冒泡(题目中给的程序是从右向左冒泡,其实结果一样),每个数向左移动的次数就是其前面比他大的数的个数,而其最左端位置就是(未排序的位置-前移的位置),而每个数的最右端位置就是ma原创 2016-07-30 11:17:58 · 2243 阅读 · 0 评论 -
(多校第五场1012)HDU5792 World is Exploding(树状数组)
题意:给出一列数,问有多少个四元组满足ad,并且四个数两两不相等,a的位置在b的前面,c的位置在d的其那面。可以先忽略四个数两两不相等的条件,那就是(,逆序对个数)乘上(顺序对个数),例如{2,4,1,3},逆序对就是{(2,1),(4,1),(4,3)} ,顺序对就是{(2,4),(2,3),(1,3)},这样3*3=9,一共九个符合ad的四元组,而其中像{2,1,3}这样的都是不符合最终条原创 2016-08-03 21:38:23 · 2166 阅读 · 0 评论 -
poj2352 Stars(树状数组)
问题要求统计左下角(x,y均小于当前star的star)有0颗星星、1颗星星.……n-1颗星星的星星个数,顺序输出。题目中给的数据是按y从小到大,所以对于star i(xi,yi),可能在它左下角的star(y#include #include #include #include #include #include #include #include #include #in原创 2016-08-11 08:50:18 · 2707 阅读 · 0 评论