POJ2828 線段樹逆序插入

2021-09-26 02:52:58 字數 945 閱讀 7065

題意:

插隊的問題,每個樣例給出n,代表有n個插隊的,每個給出p,v,意思是代號為v的人插在了第p個人的後面,問最後的隊伍的排列?

思路:最後乙個人的位置一定是確定的。依次倒著插入。

#include #include #include #include #pragma comment(linker, "/stack:102400000,102400000")

#define lson root<<1, l, mid

#define rson root<<1 | 1, mid+1, r

typedef long long ll;

const int inf = 0x3f3f3f3f;

const int maxn = 200000+5;

using namespace std;

int pos[maxn], v[maxn], tree[maxn<<2], ans[maxn];

void stree_build(int root, int l, int r)

void update(int k, int l, int r, int root, int val)

--tree[root];

int mid = (l+r) >> 1;

if(k <= tree[root<<1])

update(k, l, mid, root<<1, val);

else

update(k-tree[root<<1], mid+1, r, root<<1 | 1, val);

}int main()

for(int i = 1; i <= n; ++i) printf("%d ", ans[i]);

printf("\n");

} fclose(stdin);

return 0;

}

poj 2828 線段樹 單點插入,區間查詢

排隊買票,但是 中途 出現插隊情況,比如 0 123,代表值為123的人 插入到 0 的位置,如果後面 出現 0 456,那麼新的 0的位置就是 456,123就變成是 1的位置了 觀察發現,最後乙個插入到該位置的人位置是固定的,那麼我們可以從後面進行插入操作,pos val 代表val要插入到po...

線段樹典型例題 poj2828

逆序處理。注意到如果逆序插入,則每次插入的位置都是第x個空位。所以可以用線段樹來尋找第x個合法位置 include include include include include using namespace std const int n 200005 int sum n 3 pos n val...

poj2828 線段樹好題

題目意思是一群人排隊買票,然後後面乙個乙個的來人插隊,每個人都有乙個特殊的編號,每次告訴你他插在第幾個人的後面,問最後這串人的數字串最後是什麼。如果模擬來搞的話每次要乙個乙個的挪動人,最差的情況下每個人的位置都要變,是o n 2 的,200000的資料顯然是搞不動。正著思考麻煩的時候可以試著反向來思...