思路:
1.最裸的線段樹合併
2.我們可以觀察到子樹求乙個東西
那我們直接dfs序好了
入隊的時候統計一下有多少比他大的
出的時候統計一下
減一下
搞定~線段樹合併**:
//by siriusren
#include #include
#include
using
namespace
std;
const
int n=100050
;int n,col[n],cpy[n],tree[n*100],lson[n*100],rson[n*100
],cnt,root[n];
intfirst[n],next[n],v[n],tot,ans[n],fa[n];
void add(int x,int y)
void insert(int l,int r,int &pos,int num,int
wei)
int merge(int now,int
last)
int query(int l,int r,int pos,int l,int
r)void dfs(int
x)int
main()
指標 動態開點 合併線段樹
乙個知識點不在一道題裡說是沒有靈魂的 線段樹是用來處理區間資訊的咯 但是往往因為需要4倍空間讓許多人退卻,而動態開點的線段樹就非常棒 彷彿只用2倍就可以咯 指標儲存位置,即節點資訊,是很舒適的,所以用指標動態開點就更棒 永無鄉題面 這個題哈,我剛開始學線段樹合併時慣例懵,而且我發現 網上的題解有簡短...
bzoj 2212(線段樹合併)
傳送門 題解 權值線段樹從下往上合併,每個點統計兩個兒子中某乙個交換 不交換的答案,取min後加到總答案中。不禁讓人想起cdqz challenge 13 p.s.形態樹開兩倍空間,因為這種讀入方式肯定會讀成一棵滿二叉樹 不管存不存在子節點先加了時間戳 另外,定義變數要搞清楚哪個是輸入的形態樹,哪個...
bzoj2212(線段樹合併)
description 現在有一棵二叉樹,所有非葉子節點都有兩個孩子。在每個葉子節點上有乙個權值 有n個葉子節點,滿足這些權值為1 n的乙個排列 可以任意交換每個非葉子節點的左右孩子。要求進行一系列交換,使得最終所有葉子節點的權值按照遍歷序寫出來,逆序對個數最少。input 第一行n 下面每行,乙個...