HDU4585 樹狀陣列 STL

2021-08-03 09:55:46 字數 1475 閱讀 9917

題意:

有n+1個僧侶,然後1號已經在塔里了,能力值是1e9,現在依次給你兩個數,

第乙個代表標號,第二個代表能力值,每次挑乙個在塔里的能力最接近的跟她打,如果能力相同的取小,然後把它扔進塔里

每次輸出兩個標號,乙個舊的,乙個新的。

思路:

當時就感覺很水,所以做著做著就…

變成了,離散化能力值,然後利用樹狀陣列維護,然後二分查詢值的最近點…【確實麻煩了】

++:

1. 字首和尋找比 x 小的 1 位置,其實就是找sum(x) - 1的最左.

然後查了一下果然還是stl強勢,直接set維護能力值就行了,然後用map對映一下能力值。

然後bin神說map也是排序的…

map< pair< int,int>,int>mp

按照第一關鍵字排序。

it = mp.lower_bound(v);

樹狀陣列維護**

#include 

using

namespace

std;

typedef

long

long ll;

const

int n=1e5+10;

int node_id[n];

int node_w[n];

int ww[n];

int node[n];

int n;

vector

xs;int c[n];

int lowbit(int x)

void add(int x,int val)

}int sum(int x)

return ans;

}int solve1(int w)

return left;

}int solve2(int w)

return left;

}int main()

sort(xs.begin(),xs.end());

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

memset(c,0,sizeof(c));

add(node_w[0],1);

int i2,i1;

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

else}}

return

0;}

stl**

#include 

using

namespace

std;

typedef

long

long ll;

int n;

mapmp;

sets;

set::iterator it;

int main()

else

s.insert(w);}}

return

0;}

hdu4585 平衡樹解法

平衡樹板子 找出前驅後繼節點比較一下 include include include include include include include include include include includeusing namespace std define ll long long cons...

HDU 4585 感受一下 set 的用法

這是第一次參加邀請賽的時候遇到的題目啊。當時全場過啊。自己就是不會啊。當時我還記得自己手寫一二叉堆。淚奔。這就是一平衡樹的題目,找前繼和後繼的。set足夠了。在 set 的 it 的時候要注意是不是是開頭 include include include include include include...

hdu 3887 樹狀陣列

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