hdu5372(樹狀陣列)

2021-07-04 15:59:50 字數 778 閱讀 9774

開始看這題時以為是線段樹區間更新,誤以為和poj2528差不多,然後上手打了。。。到末尾時發現有個點不一樣,那就是刪除,還要恢復到之前的狀態,這個不會了。又從樹狀陣列入手,發現用樹狀陣列很簡單。這題的主要思想,求得左端點大於等於左端點的線段的個數,然後再求得右端點大於該線段右端點的個數,然後兩數相減得出答案,用兩個樹狀陣列維護即得到答案

#include #include#include#include#include#define mem(a) memset(a,0,sizeof(a))

using namespace std;

const int m=2*1e5+20;

typedef struct

pp;pp p[m];

typedef struct

op;op ad[m];

typedef struct

trans;

trans tr[2*m];

bool cmp(const trans&a,const trans&b)

return sum;

}int main()

else

}sort(tr+1,tr+1+2*t,cmp);

int tt=1,temp=tr[1].num;

for(i=1;i<=t*2;i++)

else

}printf("case #%d:\n",t++);

for(int i=1;i<=n;i++)

else}}

return 0;

}

hdu 3887 樹狀陣列

給你一棵樹,每個節點都有個編號。讓你求乙個節點他的子樹中編號比他小的節點有幾個。編號唯一,從1 n,已給出根節點 解 樹狀陣列統計。轉化為線性序列。可以想到的是,若要統計乙個節點,那麼比它小的孩子必須先插完,然後統計就行了。對於乙個節點i來說,只要把所有x那麼對於所有節點來說也是這樣的,從一開始插,...

hdu 3333 樹狀陣列

此題與3743相仿,但本題資料較大,需要用到離散化。如何去掉重複元素呢?採用離線演算法 首先將詢問按右端點從小到大排序,離線處理時,記錄每個元素所在位置,遇到重複元素時,從它之前出現的位置減去這個元素,這樣就是的每個元素總是出現在最後。include include include include ...

樹狀陣列 HDU1166

繼續上次那題,我們現在採用樹狀陣列來解。樹狀陣列主要用來進行區間求和統計和定點更新操作,樹狀陣列的儲存是如下方式的 假設陣列a為a 1 a 2 a 3 a n 現在我們另陣列c 1 a 1 c 2 a 1 a 2 c 3 a 3 c 4 a 1 a 2 a 3 a 4 這是啥結構呢?其實c i a ...