注釋在**中
兩個樹狀陣列,或者用兩次
第一次維護的是空位的位置,update,更新管轄範圍內空位的個數,getk獲得第k個空位置的個數,其實就是第k小數,然後佔據該位置,更新相應資訊
第二次維護的是最長不下降子串行的長度,update:更新長度,getm:獲得當前位置之前的最長的lis長度,再把當前的數加進末尾
view code
#include#include
#define lowbit(i) (i&(-i))
const
int maxn=100005;
const
int maxlog=17;
int b[maxn],pos[maxn];
int n;
void update(int i,int value)
int getk(int k)
return ans+1;
}void updatem(int i, int value)//
維護lis的長度
int getm(int i)
int main()
//初始時有n個空位,從後往前插入
for(i=n;i>=1;i--)
int ans=0;
printf("
case #%d:\n
",g++);
memset(b,0,sizeof(int)*(n+1));
for(i=1;i<=n;i++)
puts("");
}return
0;}
SDNUOJ 1665 1668(樹狀陣列的應用)
什麼是樹形陣列 樹形陣列是一種用來維護字首和的工具,上圖中序列上的就是樹形陣列,它雖然長得像個樹,但是確是乙個陣列,比如上面的t 4 的值就是1 4的字首和,其他元素以此類推。add操作實現原理 ask操作實現原理 下面是區間查詢 單點修改 1665and1666 的 include include...
HDU 1166 mea的樹狀陣列
2019年,虛擬偶像大火,hololive公司旗下有n個虛擬主播,這些主播的粉絲全部都是單推,並且這些主播都被從1到n排好序了 我們知道粉絲數是會變化的,有一天mea問你,從x號vtuber 到 y號vtuber到底有多少單推啊?當然 x 和 y 都是從 1到 n的數 你馬上去每個人的youtube...
HDU 3874 Necklace 樹狀陣列的應用
題意 有一些數,這些數中有重複的,問從 l,r 區間的和是多少,重複的數只能算一次。思路 因為有多次詢問,所以暴力的話肯定超時,又因為是區間求和問題,所以可以考慮用樹狀陣列求。樹狀陣列可以解決沒有重複數的情況,因此這道題我們可以特殊處理一下。首先我們可以把所有的詢問都存起來,然後對詢問按右端點排序,...