hdu1541(線段樹的巧用)

2021-06-23 01:36:34 字數 1163 閱讀 3170

線段樹的妙用,求乙個序列中的某個數字的前面有幾個比它小,樸素演算法是o(n*n), 線段樹是o(n*logn), 然後再變形下就是答案了

下面提供線段樹和樹狀陣列的解題**:

//線段樹

#include#include#include#include#include#include#include#include#include#include#include#define n 32005

#define inf 0x7ffffff

#define eps 1e-9

#define pi acos(-1.0)

using namespace std;

struct node

tree[n<<2];

int res[n];

void pushup(int o)

void build(int o,int l,int r)

void update(int o,int p,int v)

int m = (tree[o].l+tree[o].r)/2;

if(p <= m) update(2*o,p,v);

else update(2*o+1,p,v);

pushup(o);

}int query(int o,int x,int y)

int main()

for(i = 0; i < n; i++)

cout<#include#include#include#include#include#include#include#include#include#include#define n 32005

#define inf 0x7ffffff

#define eps 1e-9

#define pi acos(-1.0)

using namespace std;

int c[n],res[n];

int lowbit(int x)

int sum(int x)

return ans;

}void add(int x)

}int main()

for(i = 0; i < n; i++)

printf("%d\n",res[i]);

}return 0;

}

線段樹對面積的劃分 HDU 1541

題目大意是對給定的很多矩形,求出面積和,重疊的部分只能算一次 可以對x和y座標進行離散化,然後對面積進行劃分,劃分成四部分,左上,右上,左下,右下 與之前的線段式線段樹不同的是,每次對寬和高進行等分的時侯,xmid和ymid在各部分出現的時候不用 1,因為這裡算的是面積,面積是連續的 注意浮點數的判...

HDU 1541 樹狀陣列

傳送門 hdu 1541 給定一組點,用座標表示,求各個層次的點的數量,每個點層次指的是其它點中 座標均不大於當前點 座標點的數量 注意題目給出,所有輸入對於 來說都是不降序,所以只要考慮 就可以了,y不增的時候x自增,所以後輸入的點不會影響先輸入點的層次 因為計算層次的時候要排除自身,所以要先更新...

樹狀陣列hdu1541

題意 大概就是計算每顆星星左下邊包括了多少顆星星,這個數值就是level。左下邊不包括本身,不超過本身的x,y的座標,可以等於。問每種level有多少顆星星。思路 1.每次輸入乙個座標對之後,都要計算一下這個它的level。2.此題的x座標可以為0,而樹狀陣列是從1開始的,所以處理的時候對每個x座標...