這道題給人的第一感覺像是樹形
#include#define maxn 400010
#define reg register
#define cmin(_x,_y) (_x<_y>
using namespace std;
int n,tot,w[maxn],lson[maxn],rson[maxn],root[maxn];//原二叉樹的資料
int cnt,ls[maxn<<4],rs[maxn<<4],num[maxn<<4];//權值線段樹的資料
long long ans,numl,numr;
int read()
void input(reg int x)//按照題目要求,遞迴讀入每個非葉子結點的左右兒子
}int add(reg int x,reg int l,reg int r,reg int v)//動態開點
return x;
}int merge(reg int x,reg int y)//合併子樹並更新答案
void work(reg int x)//在原二叉樹上遞迴
int main()
這裡講一 bzoj 2212(線段樹合併)
傳送門 題解 權值線段樹從下往上合併,每個點統計兩個兒子中某乙個交換 不交換的答案,取min後加到總答案中。不禁讓人想起cdqz challenge 13 p.s.形態樹開兩倍空間,因為這種讀入方式肯定會讀成一棵滿二叉樹 不管存不存在子節點先加了時間戳 另外,定義變數要搞清楚哪個是輸入的形態樹,哪個...
bzoj2212(線段樹合併)
description 現在有一棵二叉樹,所有非葉子節點都有兩個孩子。在每個葉子節點上有乙個權值 有n個葉子節點,滿足這些權值為1 n的乙個排列 可以任意交換每個非葉子節點的左右孩子。要求進行一系列交換,使得最終所有葉子節點的權值按照遍歷序寫出來,逆序對個數最少。input 第一行n 下面每行,乙個...
bzoj3702 二叉樹 線段樹
現在有一棵二叉樹,所有非葉子節點都有兩個孩子。在每個葉子節點上有乙個權值 有n個葉子節點,滿足這些權值為1.n的乙個排列 可以任意交換每個非葉子節點的左右孩子。要求進行一系列交換,使得最終所有葉子節點的權值按照中序遍歷寫出來,逆序對個數最少。第一行n 下面每行,乙個數x 如果x 0,表示這個節點非葉...