題意:
插隊的問題,每個樣例給出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的資料顯然是搞不動。正著思考麻煩的時候可以試著反向來思...